# 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的刻度

`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