# MatLab Notes ## Mathmetics ### Symbol `i`或`j`虛數 `inf`無窮大 `nan`不是一個數 `pi`圓周率 ### Function `abs(n)`絕對值 `angle(c)`顯示c的徑度向位角,e.g. ``` c = 3 + 4i % 極座標 angle(c) % 0.9273 ``` `conj(c)`取共軛複數 `imag(c)`取虛數部分 `real(c)`取實數部分 `isreal`檢測是否為實數 `exp(x)`指數函數,[Website](https://blog.csdn.net/jk_101/article/details/111499745) `log(x)`自然對數 `log10(x)`以十為底的對數 `log2(x)`以二為底的對數 `sqrt(x)`開根號 `ceil(x)`取大於等於x的最小整數 `floor(x)`小於x的最大整數 `fix(x)`捨去小數 `round(x)`最接近整數 `power(x,n)`輸出x的n次方 `mod(a,b)`a mod b `gcd(a,b)`取a和b的gcd `lcm(a,b)`取a和b的lcm `sum(A)`A之元素總和 `prod(A)`A之元素乘積 `primes(x)`x以下的質數 ### Trigonometric Functions `sin` `cos` `tan` `cot` `csc` `sec`三角函數 `asin` `acos` `atan`反三角函數 `sinh` `cosh` `tanh`雙曲三角函數 `sind` `cosd` `tand`用角度的三角函數 `rad2deg(x)`把弳度換角度e.g.`rad2deg(pi) = 180` ### Vector Functions `dot(A,B)`A和B向量的內積 `cross(A,B)`A和B的外積 ### Polynomial Functions `roots([])`給多項式求解 `poly([])`給根求多項式 `conv([],[])`多項式相乘 `deconv([],[])`多項式相除 `polyder([])`微分 `polyint([])`積分 ## System Command ### System `pause(n)`暫停n秒 `waitforbuttonpress`滑鼠按下回傳0,鍵盤按下回傳1 ### cmd `clc`清除cmd內容 `clear`清除變數設定 `clf`清除圖形介面 `close`關閉圖形介面 ### I/O `input()`[Website](https://blog.csdn.net/jk_101/article/details/111942437) `disp(x)`輸出x數值 `fopen` `fprintf` `fclose` [Website](http://bime-matlab.blogspot.com/2006/10/76-fprintf.html) ## Draw `line()`[Website](https://ww2.mathworks.cn/help/matlab/ref/line.html)(作圖) `plot()`[Website](https://blog.csdn.net/zengxiantao1994/article/details/73440934)(作圖) `figure`[Website](https://blog.csdn.net/qq_30387863/article/details/80301996)(創建新的窗口) `ezplot('',[xmin,xmax,ymin,ymax])`顧名思義,easy plot,可加入xy軸範圍,e.g.`ezplot('sin(x)/x',[-5,5])`可以畫出x軸-5~5的sin(x)/x的圖形,也可以畫`ezplot(x(t),y(t),[tmin,tmax])` `plotyy(x1,y1,x2,y2)`左右y軸分別為y1和y2的刻度 ![](https://i.imgur.com/quxUChw.png =60%x60%) `semilogx()`類似`plot`,但x軸為指數 `semilogy()`同上的y軸版本 `loglog()`同上的x,y軸版本 `fill(x,y,'color')`畫實心圖,`fill3()`三維版本 `grid`on或off開啟或關閉座標方格 `xlabel('text')`text填入x軸名稱 `ylabel('text')`text填入y軸名稱 `gtext('text')`執行到此程式用鼠標選擇text顯示位置 `text(x,y,'')`在(x,y)顯示參數3中的文字 `axis()`傳入`[xbegin,xend,ybegin,yend]`來限制圖表座標軸範圍 :::warning 如果axis()後面的指令範圍超過axis()限制的範圍,axis()會被覆蓋 ::: `axis` 1. `auto`自動設定座標軸 2. `tight`以圖形極值設定座標軸 3. `ij`x軸由左而右遞增,y軸由上而下遞增 4. `equal` 使x和y軸的座標單位長度相同 5. `sqare`視窗為正方形 6. `off` `on`開啟關閉 `title()`圖表標題 `hold`再以存在的圖形中繼續堆疊圖形`on` `off`操控 `subplot(m, n, p)`創造m行n列的介面,p編號由左至右由上至下 3-D drawing 1. `mesh(X,Y,Z)`畫出三維圖形,其中X,Y,Z要以二維陣列傳入(x,y為一維陣列,以`[X,Y]=meshgrid(x,y)`得到X,Y 2. `meshc()` `meshz()` `waterfall()` `tremesh()` `surf()` `surfc()` `surfl()` `surfnorm()` 與`mesh()`類似,但不同表現方式 3. 有畫等高線圖等三維圖形及圓餅圖等二維圖形function,上網查 ### Others `beep`[Website](https://www.mathworks.com/help/matlab/ref/beep.html) `echo` ??? ## Style ### Format `long` 顯示小數點後15位 `short` 顯示小數點後5位 `e` 科學記號 `bank` 銀行計算貨幣用小數點兩位 ## Array ### Create Array `x = first : last`從first到last遞增 `x = first : incrtment : last`從first到last以incrment遞增 `x = linspace(first, last, n)`從first到last共n個元素的陣列 `x = logspace(first, last, n)`從10的first次方到10的last次方共n個元素 `x = [1 2;3 4;5 6]`創造一個3 row 2 column的陣列 `ones(n)`n*n全為1的陣列 `zeros(n)`n*n全為0的陣列 `ones(r,c)`r*c全為1的陣列 `zeros(r,c)`r*c全為0的陣列 `rand(n)`0~1之間n*n的陣列 `rand(r,c)`同邏輯 `randn(n)`包括負數n*n隨機陣列 `diag(a)`將a放在陣列的diagonal上 `diag(a,1)`在上面基礎上左方下方多一行 `diag(a,-2)`在diag(a)基礎丄右方上方加兩行 ``` diag(1:3) 1 0 0 0 2 0 0 0 3 diag(1:3,1) 0 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 diag(1:3,-1) 0 0 0 0 1 0 0 0 0 2 0 0 0 0 3 0 ``` ### Call Array `x(1:5)`顯示x的前5個元素 `x(6:end)`顯示從6到最後一個元素 `x(1:2:5)`從1到5每次遞增二元素 `triu(x)`顯示x右上部分(包括對角線),其餘剩0 `tril(x)`顯示左下,同上 `knor(x,y)`將x的全部元素乘上y `repmat(x,[n,n])`將x陣列複製為n列n行 `magic(n)`回傳n平方的幻方矩陣 ### Array Calculations `A(2,2) = 10`將A陣列(2,2)位置改成10 ****超出陣列範圍陣列擴張其他補0*** `A(:,4) = 10`將A陣列(1:10,4)的元素都改成10 `C=[A B(:,[2,3])]`將A陣列和B陣列二三行合成C ``` A = [1 2 3;4 5 6;7 8 9] B = [7 8 9;4 5 6;1 2 3] C = [A B(;,[2,3])] = 1 2 3 8 9 4 5 6 5 6 7 8 9 2 3 ``` `x=x'`行列互換 `.*` `./` `.^` 為兩陣列專用運算 ****純量與陣列次方運算要用`.^`**** ### Array Functions `sort(x)`從小到大 `sort(A,dim)`對特定維度排序e.g.`sort(A,2)`對column作排列 `sort(A,mode)`mode`ascend`小到大,`descend`大到小 `find(條件)`搜尋一維陣列中符合條件的index `[i, j] = find(條件)`同上(二維) `max(x)`找出陣列x中的最大值,多維如`find(x)` `min(x)`最小值,同上 `flipud(x)`將x上下顛倒 `fliplr(x)`將x左右顛倒 `rot90(x, n)`將x逆時針轉90度n次,默認n為1 `reshape(A,n,m)`將轉換為n列m行的陣列,`n*m`要等於A的元素數量 ``` A = 1 2 3 4 5 6 7 8 9 reshape(A,1,9) = [1, 4, 7, 2, 5, 8, 3, 6, 9] ``` `length(A)`回傳維度中長度最長e.g.A為4*6的陣列,則length(A)回傳6 `ndims(A)`回傳A的維度e.g.A為二維陣列,則回傳2 `numel(A)`回傳A的元素數目 `eq(A,B)`回傳A,B是否相同(陣列) `ne(A,B)`A~=B `ge(A,B)`A>=B `gt(A,B)`A>B `le(A,B)`A<=B `lt(A,B)`A<B