---
# System prepended metadata

title: CH1~7

---

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

