# CH2基本函數/運算 :::info `format compact` 縮小顯示的列距 `+` 加 `-` 減 `*` 乘 `/` 除 `^` 次方 運算優先級 `( )` > `^` > `* /` > `+ -` ::: 特殊變數 i 或 j:虛數 inf:無窮大 nan:不是一個數值 pi:圓周率,可直接使用 eps:傳回最精確的浮點值 常用functions sin( ) 正弦函式 cos( ) 餘弦函式 tan( ) 正切函式 cot( ) 餘切函式 sec( ) 正割函式 csc( ) 餘割函式 P.s. sind(90) 可以直接輸入角度 | 常用指令 | | |---|---| | who | 顯示變數名稱| | whos| 顯示變數名稱及其大小格式| | clc | 清除螢幕| | clear |清除變數| | clear all |清除所有變數| | clear a b |清除變數 a and b| | dir | 顯示所有檔案| | what| 顯示檔案*.m或*.mat| :::success **其他:** `;` 不顯示執行結果 `%` 註解 ::: 常用數學函數|| ---|---| abs()|絕對值| angle()|徑度相位角,若以角度表示,必須 \*180 / pi complex(a, b)|複數函數,a 為實數部分,b 為虛數部分 conj()|取共軛複數 real()|取實數 imag()|取虛數 isreal()|是否為實數,若真回傳值1,否則回傳值0 算術函數|| ---|---| ceil(x) |向上取整 fix(x) |向0取整 floor(x) | 向下取整 round(x) |四捨五入(取至整數) power(x,y) |次方 mod(x,y) |x除以y的餘數 gcd(x,y) |x和y的最大公因數 lcm(x,y) |x和y的最小公倍數 ## 練習 exploit("函式") |程式碼|圖| |---|---| |`ezplot("log(x)")`|![image](https://hackmd.io/_uploads/BJP47uEDgl.png =33%x)| |`ezplot("ceil(x)")`|![image](https://hackmd.io/_uploads/Skce4_Nveg.png =33%x)| |`ezplot("sin((pi)^1/2) + log(tan(1))")`|![image](https://hackmd.io/_uploads/SkpNSO4Pll.png =33%x)| # CH3陣列與運算 :::info **簡易行列式:** 行:以空格分隔 `a = [1 2 3 4]` 列:以分號分隔 `b = [1;2;3;4]` ::: ### 常用寫法 | 式 | 說明 | 範例 | 結果| | --- | --- | -------- |---| | a = x:y | x開始y結束的陣列 | a = 2:8 |2 3 4 5 6 7 8 a = x\:i:y|以i為間隔,x開始y結束的陣列|a = 2\:3:8|2 5 8 b = linspace(x,y,n)|x開始y結束的線性空間,n為節點數|b = linspace(0,10,3)|0 5 10 c = logspace(x,y,n)|x為10的起始次方,y為結束次方,n為節點數 | 亂數陣列 | - | | ---- | --- | rand(n邊長) |建立亂數矩陣(0 ~ 1) rand(r行,c列) |建立亂數矩陣(0 ~ 1) randn(n) |建立亂數矩陣(常態分布) randn(r,c) |建立亂數矩陣(常態分布) | 整數亂數陣列 | - | randi( max )|1開始的隨機數 randi( max , n )|1開始的隨機矩陣(N為邊長) randi( max , r , c)|1開始的隨機矩陣(R為寬c為長) ### 矩陣調整 ||說明| |---|---| |a(5) = 99|調整值| |a’|轉置| |a(:,2)=[ ] |刪除行| |a([1,3],:)=[ ] |刪除列| |a = [a;10 11 12] |增加列| ### 有關陣列的函式 | 標準矩陣 | | | -------- | --- | diag([1,2,3]) | 建立對角矩陣 diag([1,2,3],1) |建立對角矩陣(右移) diag([1,2,3],-1)| 建立對角矩陣(下移) diag(陣列) |取出對角線的值 | 旋轉陣列 | | | -------- | --- | flipud(x) |上下顛倒 fliplr(x) |左右顛倒 rot90(x) |逆時針旋轉90度 rot90(x,n) | 逆時針旋轉90度n次 triu(x) | 右上部保留其餘設為0 tril(x) | 左下部保留其餘設為0 | 簡易矩陣函式 | | | -------- | --- | find(條件式) |搜尋符合條件(索引值) sort(x) |x陣列由小至大排序 min(x) | 陣列最小值 max(x) | 陣列最大值 -|- numel( ) |計算陣列總數字個數 sum( ) |計算陣列總和(直向) sum(sum()) = sum(x(:))|計算陣列總和(全部) x( : ) |依照欄順序拉成一列 # CH4 關係與邏輯運算 | 基本輸入輸出 | | | -------- | -------- | `displ()`|輸出 `input('提示字')`|輸入 `fprintf`|格式化輸出 | fprintf | | | ------- | ---- | | %d | 整數 | | %f | 小數 | | %.2f | 小數後第二位 | | %s | 字串 | ex: `fprintf('現在的日期是%d/%d/%d',y,m,d);` `fprintf('半徑為%d的圓,面積為%.3f',r,pi*r^2)` :::info **if結構** if (條件一) ... elseif (條件二) ... elseif (條件三) ... else ... end ::: |關係運算子|| |---|---| < |小於 <= |小於等於 \> |大於 \>= |大於等於 == |等於 ~= |不等於 :::success **邏輯運算子** & :and | : or ~ : not ::: # CH5重復結構 ## for :::info **基本結構:** for i = 陣列 ...重複執行的程式 end ::: ## 畫線 ```matlab clf %清理圖像 x = [a b] y = [c d] line(x,y) %點(a,c)到點(b,d) ``` ### 改顏色 寬度 `line( x , y , ‘LineWidth’ , 2 , ‘color’ , [255/255 204/255 51/255] ) ` * LineWidth = 粗細 (>0) * color = [紅,綠,藍] (0~1) Ex: ![image](https://hackmd.io/_uploads/HJvrVyv_xe.png =100x) ## while :::info **基本結構:** while (條件) ...條件成立->執行程式 end ::: :::success **迴圈內中斷控制:** break; ->跳出整個迴圈 continue; ->跳至頂端進行下一輪迴圈 ::: # CH6 函式 :::info function [輸出內容] = 名稱(輸入內容) ...函式執行的程式 end \*輸入及輸出內容皆可為複數或空 ::: ### 多載(Overload) 根據輸入資料的不同(參數個數、型別),執行不同的程式碼。 `nargin`=輸入參數數量 Ex: ```matlab= function [output] = script(a,b) if nargin == 0 %沒有輸入 elseif nargin == 1 %只有一項輸入(a) elseif nargin == 2 %有兩項輸入 end end ```