MATLAB 期中考複習筆記 (CH1 ~ CH5)

💡 使用 Ctrl+F 快速查找關鍵字

📌 格式說明:函數名稱 — 功能描述;程式碼以程式碼區塊呈現


目錄

  1. 數值與顯示格式
  2. 基本常數與特殊值
  3. 數學函式庫
  4. 複數運算
  5. 陣列與矩陣
  6. 向量運算:點積與叉積
  7. 繪圖函式
  8. 運算子
  9. 控制流程
  10. 輸入輸出與特別函式
  11. 常用指令

1. 數值與顯示格式

指令 說明
format short 顯示 5 位有效數字(預設)
format long 顯示 15 位(double)或 7 位(float)有效數字
format short e 科學記號,5 位有效數字
format long e 科學記號,15 位有效數字
format short g 固定或浮點格式,5 位
format long g 固定或浮點格式,15 位
format bank 顯示小數兩位(貨幣計算用)
format rat 以分數(有理數)形式顯示

2. 基本常數與特殊值

常數/指令 說明
pi 圓周率 π ≈ 3.14159… (可用 clear pi 還原)
ij 虛數單位 √(-1)
inf 無窮大 (∞)
nan 非數值 (Not a Number)
eps 機器精度(最小浮點數差)
intmax() 回傳整數最大值
intmin() 回傳整數最小值
realmax 最大可用正浮點數
realmin 最小可用正浮點數

3. 數學函式庫

3.1 定義用函式

函式 說明
abs(x) 絕對值
sign(x) 符號函數:x>0 回傳1;x=0 回傳0;x<0 回傳-1
angle(x) 複數的徑度相位角
unwrap(x) 相位角連續性處理(消除相位跳變)

3.2 三角函數(Trigonometric Function)

正/反三角函數(弧度制):

函式 說明 函式 說明
sin(x) 正弦 asin(x) 反正弦
cos(x) 餘弦 acos(x) 反餘弦
tan(x) 正切(sin/cos atan(x) 反正切
cot(x) 餘切(cos/sin acot(x) 反餘切
sec(x) 正割(1/cos asec(x) 反正割
csc(x) 餘割(1/sin acsc(x) 反餘割

雙曲函數:

函式 說明 函式 說明
sinh(x) 雙曲正弦 asinh(x) 反雙曲正弦
cosh(x) 雙曲餘弦 acosh(x) 反雙曲餘弦
tanh(x) 雙曲正切 atanh(x) 反雙曲正切
coth(x) 雙曲餘切 acoth(x) 反雙曲餘切
sech(x) 雙曲正割 asech(x) 反雙曲正割
csch(x) 雙曲餘割 acsch(x) 反雙曲餘割

⚠️ 注意:MATLAB 三角函數預設使用弧度(radians),若需角度制,請使用 sind(x)cosd(x) 等加 d 的版本。


3.3 指數與對數函數(Exponential Function)

函式 說明
exp(x) 自然指數 e^x
log(x) 自然對數 ln(x),底數為 e
log2(x) 以 2 為底的對數
log10(x) 以 10 為底的對數
sqrt(x) 開根號 √x
nthroot(x, n) 求 x 的 n 次方根(實數根)

3.4 算術函數(Arithmetic Function)

取整函數(四種):

函式 說明 範例 (x=2.7, x=-2.7)
ceil(x) 無條件進位(往正無限大) 3, -2
floor(x) 無條件捨去(往負無限大) 2, -3
round(x) 四捨五入(最接近整數) 3, -3
fix(x) 截斷小數(往零方向) 2, -2

其他算術函數:

函式 說明
mod(x, y) x 除以 y 的餘數(結果與 y 同號)
rem(x, y) x 除以 y 的餘數(結果與 x 同號)
power(x, n) x 的 n 次方(等同 x.^n
gcd(x, y) x 與 y 的最大公因數
lcm(x, y) x 與 y 的最小公倍數
factorial(n) n 的階乘 n!

💡 modrem 的差異:mod(-7, 3) = 2;rem(-7, 3) = -1


4. 複數運算

建立複數:

1
2
z = a + bi     % 或 a + bj
z = complex(a, b) % 函式建立法

複數操作函式:

函式 說明
real(z) 取實數部分
imag(z) 取虛數部分
conj(z) 取共軛複數 (a - bi)
abs(z) 複數模(magnitude)= √(a²+b²)
angle(z) 相位角(弧度)
isreal(z) 是否為實數(是→1,否→0)

範例:

1
2
3
4
z = 3 + 4i;
abs(z) % 回傳 5
angle(z) % 回傳 0.9273 rad ≈ 53.13°
conj(z) % 回傳 3 - 4i

5. 陣列與矩陣

5.1 陣列建立語法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
% 1. 任意元素之列向量
x = [1, 2, 3, 4];

% 2. 等差數列(步長預設為 1)
x = Start : End;

% 3. 等差數列(自訂步長)
x = Start : Step : End;

% 4. 線性等間距向量(共 n 個元素)
x = linspace(Start, End, n);

% 5. 對數等間距向量(從 10^Start 到 10^End,共 n 個元素)
x = logspace(Start, End, n);

% 6. 行向量(column vector)
x = [1; 2; 3; 4];

% 7. 矩陣(分號分隔列)
A = [1, 2, 3; 4, 5, 6; 7, 8, 9];

5.2 標準陣列(Standard Array)

函式 說明
zeros(n) n×n 全零矩陣
zeros(n, m) n×m 全零矩陣
ones(n) n×n 全一矩陣
ones(n, m) n×m 全一矩陣
eye(n) n×n 單位矩陣(對角線為1)
true(n) n×n 邏輯真值矩陣
false(n) n×n 邏輯假值矩陣

5.3 亂數矩陣(Random Number Array)

函式 說明
rand(n) n×n 均勻分布亂數矩陣(0~1)
rand(n, m) n×m 均勻分布亂數矩陣(0~1)
randn(n) n×n 標準常態分布亂數矩陣(含負值)
randn(n, m) n×m 標準常態分布亂數矩陣
randi(imax, n) n×n 均勻分布整數亂數矩陣(1~imax)

5.4 對角矩陣(diag)

diag(v) — 將向量 v 排在對角線上,生成對角矩陣

1
2
3
4
5
>> diag(1:3)
ans =
1 0 0
0 2 0
0 0 3

diag(v, k) — 偏移 k 個位置的對角

1
2
3
4
5
6
7
8
9
10
11
>> diag(1:2, 1)    % 上偏移1
ans =
0 1 0
0 0 2
0 0 0

>> diag(1:2, -1) % 下偏移1
ans =
0 0 0
1 0 0
0 2 0

💡 diag(A) 若輸入是矩陣,則提取其對角線元素,回傳向量。


5.5 陣列運算子

基本運算:

運算子 說明
+ 矩陣/純量加法
- 矩陣/純量減法
* 矩陣乘法(線性代數)
/ 矩陣右除(A/B = A×B⁻¹)
\ 矩陣左除(A\B = A⁻¹×B)
^ 矩陣次方

逐元素(Element-wise)運算:

運算子 說明
.* 逐元素相乘
./ 逐元素右相除
.\ 逐元素左相除
.^ 逐元素次方
1
2
3
4
5
6
a = [1, 2, 3];
b = [4, 5, 6];

a .* b % [4, 10, 18] — 逐元素相乘
a .^ 2 % [1, 4, 9] — 逐元素平方
2 .^ a % [2, 4, 8] — 2的各次方

5.6 陣列控制與索引

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
A = [1, 2, 3; 4, 5, 6];

% 取得元素
A(1, 2) % 第1列第2行 → 2
A(2, :) % 第2列全部 → [4, 5, 6]
A(:, 1) % 第1行全部 → [1; 4]
A(1:2, 2:3) % 子矩陣

% 修改元素
A(1, 1) = 7 % 修改第1列第1行為7
A(:, 2) = 3 % 第2行全部改為3
A(:, 2) = [3; 3] % 效果同上

% 刪除列/行
A(1, :) = [] % 刪除第1列
A(:, 2) = [] % 刪除第2行

% 陣列資訊
size(A) % 回傳 [列數, 行數]
length(A) % 回傳最大維度長度
numel(A) % 回傳總元素個數
ndims(A) % 回傳維度數

5.7 陣列排序與搜尋

排序:

函式 說明
sort(x) 一維陣列由小至大排序
sort(x, dim) 沿指定維度排序(dim=1: 按列;dim=2: 按行)
sort(x, 'ascend') 升冪排序(預設)
sort(x, 'descend') 降冪排序
[sorted, idx] = sort(x) 同時回傳排序後陣列和原始索引
sortrows(A, col) 按指定行排序矩陣的列

搜尋:

函式 說明
find(condition) 回傳符合條件的索引(一維)
[i, j] = find(condition) 回傳符合條件的列索引 i 與行索引 j(二維)
1
2
3
x = [3, 1, 4, 1, 5, 9];
find(x > 3) % 回傳 [3, 5, 6](索引)
find(x == max(x)) % 找出最大值的索引

5.8 陣列極值

函式 說明
max(x) 最大值
min(x) 最小值
[mx, id] = max(x) 最大值與其索引
[mn, id] = min(x) 最小值與其索引
max(A, [], dim) 沿指定維度取最大值
sum(x) 元素總和
prod(x) 元素連乘積
mean(x) 平均值
median(x) 中位數
std(x) 標準差
var(x) 變異數
cumsum(x) 累積加總

5.9 陣列顯示與操作函式

函式 說明
flipud(x) 上下翻轉
fliplr(x) 左右翻轉
rot90(x) 逆時針旋轉 90°
rot90(x, k) 逆時針旋轉 k×90°
reshape(x, n, m) 重新排列為 n 列 m 行(總元素數需相同)
triu(x) 上三角矩陣(其餘設為0)
tril(x) 下三角矩陣(其餘設為0)
kron(x, y) Kronecker 張量積
repmat(x, [n, m]) 將 x 複製 n×m 次
cat(dim, A, B) 沿指定維度拼接矩陣
horzcat(A, B) 水平拼接(等同 [A, B]
vertcat(A, B) 垂直拼接(等同 [A; B]
transpose(A)A.' 轉置(不取共軛)
A' 共軛轉置(Hermitian transpose)

6. 向量運算:點積與叉積

點積(Dot Product / Scalar Product):

1
dot(a, b)   % 回傳純量

定義:a·b = |a||b|cos(θ) = Σ(aᵢ × bᵢ)

叉積(Cross Product / Vector Product):

1
cross(a, b)   % 回傳向量(僅適用三維向量)

定義:a × b 的結果垂直於 a 與 b 所構成的平面,大小為 |a||b|sin(θ)

1
2
3
4
a = [1, 0, 0];
b = [0, 1, 0];
dot(a, b) % → 0(互相垂直)
cross(a, b) % → [0, 0, 1](z 軸方向)

7. 繪圖函式

基本繪圖:

函式 說明
plot(x, y) 二維折線圖
plot(x, y, 'style') 帶樣式的折線圖(如 'r--o'
fplot('func') 繪製函數圖形(較精確)
ezplot('func') 簡易函數圖形(舊版,建議改用 fplot
scatter(x, y) 散點圖
bar(x, y) 長條圖
histogram(x) 直方圖
stem(x, y) 莖葉圖(離散訊號)

三維繪圖:

函式 說明
plot3(x, y, z) 三維折線圖
surf(X, Y, Z) 三維曲面圖
mesh(X, Y, Z) 三維網格圖
contour(Z) 等高線圖

圖形控制:

1
2
3
4
5
6
7
8
9
10
11
12
grid on          % 開啟格線
grid off % 關閉格線
grid minor % 細緻格線
hold on % 保持當前圖形(疊加繪圖)
hold off % 取消保持
xlabel('text') % x 軸標籤
ylabel('text') % y 軸標籤
title('text') % 圖形標題
legend('A','B') % 圖例
axis([xmin xmax ymin ymax]) % 設定軸範圍
figure % 開新圖形視窗
subplot(m, n, p) % 子圖排列

8. 運算子

8.1 關係運算子

運算子 說明 運算子 說明
< 小於 > 大於
<= 小於或等於 >= 大於或等於
== 等於 ~= 不等於

⚠️ 注意:MATLAB 使用 ~= 表示不等於,不是 !=


8.2 邏輯運算子

運算子 函式 說明
& and(a,b) 逐元素 AND
| or(a,b) 逐元素 OR
~ not(a) 邏輯 NOT
&& 短路 AND(用於純量,if/while 常用)
|| 短路 OR(用於純量,if/while 常用)
xor(a,b) 互斥 OR

8.3 檢查用函式

函式 說明
all(x) 所有元素非零則回傳 1(True)
any(x) 有任一元素非零則回傳 1
find(x) 非零元素的索引位置
isfinite(x) 元素是否為有限值
isinf(x) 元素是否為無限值
isnan(x) 元素是否為 NaN
isnumeric(x) 是否為數值型別
isempty(x) 是否為空陣列
isstr(x) / ischar(x) 是否為字串
islogical(x) 是否為邏輯型別
isinteger(x) 是否為整數型別

9. 控制流程

for 迴圈

1
2
3
4
5
6
7
8
9
10
11
12
13
14
% 基本用法
for i = 1:10
disp(i);
end

% 自訂步長
for x = 0 : 0.5 : 2
disp(x);
end

% 迭代陣列
for col = A % A 的每一行(column)
disp(col);
end

while 迴圈

1
2
3
4
5
x = 1;
while x < 100
x = x * 2;
end
disp(x);

if / elseif / else

1
2
3
4
5
6
7
8
9
10
11
score = 85;

if score >= 90
disp('A');
elseif score >= 80
disp('B');
elseif score >= 70
disp('C');
else
disp('F');
end

switch / case

1
2
3
4
5
6
7
8
9
10
11
12
13
14
day = 3;

switch day
case 1
disp('Monday');
case 2
disp('Tuesday');
case 3
disp('Wednesday');
case {6, 7} % 多值可用 cell array
disp('Weekend');
otherwise
disp('Unknown');
end

迴圈控制關鍵字

關鍵字 說明
break 立即跳出最近的迴圈
continue 跳過本次迭代,繼續下次
return 結束目前函式/腳本

10. 輸入輸出與特別函式

函式 說明
input('msg') 提示使用者輸入數值
input('msg', 's') 提示使用者輸入字串
disp(x) 顯示數值或字串(不顯示變數名)
fprintf('fmt', x) 格式化輸出(類似 C 的 printf)
sprintf('fmt', x) 格式化字串(不輸出,回傳字串)
pause(n) 暫停 n 秒
pause 暫停,等待任意鍵
waitforbuttonpress 等待鍵盤或滑鼠點擊
beep 發出系統提示音

fprintf 格式符號:

1
2
3
fprintf('Value = %d\n', 42);     % 整數
fprintf('Pi = %.4f\n', pi); % 浮點數(4位小數)
fprintf('Name = %s\n', 'MATLAB'); % 字串

11. 常用指令

指令 說明
who 列出工作區所有變數名稱
whos 列出變數詳細資訊(含大小與型別)
clear 清除所有變數
clear x 清除指定變數 x
clc 清除命令視窗輸出
close all 關閉所有圖形視窗
edit 開啟腳本編輯器
help func 查詢函式說明
doc func 開啟函式詳細文件
echo on 執行腳本時顯示每行指令
echo off 不顯示腳本內容(預設)
quit / exit 結束 MATLAB
tic / toc 計時開始 / 顯示經過時間

快速記憶表:取整四函式比較

ceil floor round fix
方向 往 +∞ 往 -∞ 最近整數 往 0
2.3 3 2 2 2
2.7 3 2 3 2
-2.3 -2 -3 -2 -2
-2.7 -2 -3 -3 -2

快速記憶表:mod vs rem

mod(x, y) rem(x, y)
餘數符號 除數 y 相同 被除數 x 相同
mod(7, 3) 1 1
mod(-7, 3) 2 -1
mod(7, -3) -2 1

📝 建議學習資源

  • MATLAB 官方文件:mathworks.com/help/matlab
  • 使用 help <函式名>doc <函式名> 在 MATLAB 中查詢即時說明