# 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)")`||
|`ezplot("ceil(x)")`||
|`ezplot("sin((pi)^1/2) + log(tan(1))")`||
# 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:

## 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
```