MATLAB 編程語言詳細教學網站
MATLAB 是以矩陣與陣列運算為核心的程式語言,非常適合數值計算、資料分析、演算法實作、科學研究與工程模擬。 本網站以繁體中文逐步說明最重要的學習路線:先學會指令與變數,再理解矩陣、索引、控制流程、函式設計與繪圖, 最後透過實際範例與測驗把觀念真正內化。
你會學到什麼
從變數、註解、矩陣建立,到條件判斷、迴圈、函式撰寫與繪圖,建立完整入門知識地圖。
為什麼 MATLAB 特別
它不像許多語言只處理單一數值,而是天然以向量、矩陣與陣列做計算,這讓科學與工程工作更直覺。
如何使用本頁
建議照章節順序閱讀,先理解語法,再執行範例,最後完成測驗。若你已具基礎,可直接跳到應用實作。
MATLAB 學習地圖
官方文件指出 MATLAB 的語言基礎涵蓋輸入指令、矩陣與陣列、資料型別、運算子,以及迴圈與條件判斷。 這些就是新手最應優先掌握的主軸。
第一階段:語法基礎
學會變數、輸出、註解、運算與顯示結果。
第二階段:矩陣思維
理解 MATLAB 最核心的矩陣、陣列建立、索引與元素運算。
第三階段:寫出完整程式
掌握流程控制、Script、Function、繪圖與資料分析應用。
一、基本語法教學
這一節先建立你對 MATLAB 指令風格的基本直覺。
1. 變數與指定
在 MATLAB 中,使用等號 = 指定值給變數。變數通常不需要事先宣告型別。
a = 10
b = 3.5
name = "MATLAB"
sumValue = a + b
2. 分號與輸出
若程式行尾沒有分號,MATLAB 會把結果顯示在命令視窗;若加上分號,則只執行不顯示。
x = 5 % 會顯示 x
y = 8; % 不會顯示 y
z = x + y
3. 註解
單行註解使用百分號 %,可幫助自己或他人理解程式用途。
% 這是一行註解
radius = 3;
area = pi * radius^2; % 計算圓面積
4. 常見輸出函式
disp("Hello MATLAB")
fprintf("圓面積 = %.2f\n", area)
語法速查表
| 語法 | 用途 | 例子 |
|---|---|---|
= |
指定值 | a = 10 |
; |
抑制輸出 | b = 5; |
% |
單行註解 | % 計算平均 |
disp() |
顯示文字或變數 | disp(a) |
fprintf() |
格式化輸出 | fprintf("%.2f",x) |
二、矩陣與陣列
MATLAB 最重要的特色,就是以陣列與矩陣為核心進行運算。你應把它想成「預設就懂向量與矩陣」的語言。
1. 建立向量與矩陣
rowVec = [1 2 3 4]
colVec = [1; 2; 3; 4]
A = [1 2 3; 4 5 6; 7 8 9]
2. 常用建立函式
z = zeros(3,3) % 3x3 零矩陣
o = ones(2,4) % 2x4 全 1 矩陣
r = rand(3,2) % 3x2 隨機矩陣
3. 陣列大小
size(A) % 回傳矩陣尺寸
length(rowVec)
numel(A) % 元素總數
三、索引與冒號運算子
官方文件指出,MATLAB 主要有位置索引、線性索引、邏輯索引三種主要方式;而冒號運算子是最常用也最重要的工具之一。
1. 位置索引
A = [1 2 3; 4 5 6; 7 8 9];
value = A(2,3) % 第 2 列第 3 欄,結果為 6
col2 = A(:,2) % 取第 2 欄
row1 = A(1,:) % 取第 1 列
2. 冒號運算子 :
冒號可以用來建立等差向量、切片陣列、指定 for 迴圈範圍。
x = 1:10
y = 0:0.5:2
desc = 10:-2:2
3. end 關鍵字
lastValue = A(end)
lastCol = A(:, end)
part = A(1:2, 2:end)
4. 線性索引
MATLAB 在記憶體中是按欄儲存,因此線性索引會沿著欄方向展開。
A = [12 36 91; 45 29 48; 33 25 11];
A(6) % 對應到第 6 個線性位置
5. 邏輯索引
A = [3 8 1; 7 2 9];
mask = A > 4
result = A(mask)
執行後,mask 會變成一個布林矩陣,表示哪些位置符合條件;再用它去索引,就能取出所有符合條件的元素。
新手最實用的索引範例
scores = [72 85 91 63 88];
highScores = scores(scores >= 80)
這段程式會把所有大於等於 80 分的成績抓出來,非常適合資料篩選任務。
四、運算子與矩陣思維
MATLAB 同時支援「陣列逐元素運算」與「線性代數矩陣運算」,這是初學者最容易混淆、也是最需要掌握的一節。
| 類型 | 運算子 | 說明 | 例子 |
|---|---|---|---|
| 加減 | + - |
加減法在陣列與矩陣中形式相同 | A + B |
| 矩陣乘法 | * |
遵守線性代數規則 | A * B |
| 元素乘法 | .* |
對應位置相乘 | A .* B |
| 矩陣除法 | / \ |
求解矩陣方程常用 | A \ b |
| 元素除法 | ./ .\ |
逐元素相除 | A ./ B |
| 矩陣次方 | ^ |
矩陣乘方 | A^2 |
| 元素次方 | .^ |
每個元素各自做冪次 | A.^2 |
| 轉置 | ' .' |
' 為共軛轉置,.' 為純轉置 |
A' |
矩陣乘法
A = [1 2; 3 4];
B = [5; 6];
C = A * B
元素乘法
A = [1 2; 3 4];
B = [10 20; 30 40];
C = A .* B
元素次方
x = [1 2 3 4];
y = x.^2
五、流程控制:if、for、while、switch
寫出真正有邏輯的程式,關鍵在於控制流程。官方文件指出,MATLAB 的條件與迴圈結構主要包含 if、switch、for、while。
if / elseif / else
當你要依條件分支執行不同程式碼時使用。
score = 86;
if score >= 90
grade = "A";
elseif score >= 80
grade = "B";
else
grade = "C";
end
for 迴圈
當重複次數明確時最常用。
sumValue = 0;
for i = 1:5
sumValue = sumValue + i;
end
while 迴圈
當重複條件取決於執行過程時使用。
n = 1;
while n <= 16
disp(n)
n = n * 2;
end
switch / case / otherwise
當你要針對單一變數的不同值執行不同分支時,switch 可讓程式更清楚。
dayNum = 3;
switch dayNum
case 1
dayName = "星期一";
case 2
dayName = "星期二";
case 3
dayName = "星期三";
otherwise
dayName = "其他";
end
流程控制的使用建議
- 條件只有兩三種時,用
if最直覺。 - 明確的固定次數重複,用
for。 - 要持續做到條件不成立為止,用
while。 - 單一變數對應多個固定選項時,用
switch可讀性更高。
六、Script 與 Function
Script 與 Function 都能儲存一串可重複使用的 MATLAB 程式碼,但兩者的用途與彈性不同。
Script 是什麼?
Script 是最簡單的程式檔案,適合把一連串命令依序寫下來並重複執行。它沒有輸入與輸出參數,通常直接使用基礎工作區的變數。
% 檔名: triangle_area_script.m
b = 5;
h = 3;
a = 0.5 * (b * h);
disp(a)
Function 是什麼?
Function 則更具彈性,能接受輸入參數並回傳結果,而且有自己的工作區,不會直接汙染基礎工作區。
function a = triangle_area(b, h)
a = 0.5 * (b * h);
end
呼叫方式:
area1 = triangle_area(5, 3)
area2 = triangle_area(10, 8)
Script 與 Function 差異比較
| 比較項目 | Script | Function |
|---|---|---|
| 輸入參數 | 沒有 | 可定義 |
| 輸出值 | 通常直接產生變數 | 可明確回傳 |
| 工作區 | 基礎工作區 | 獨立工作區 |
| 彈性 | 較低 | 較高 |
| 適用情境 | 快速試驗、流程操作 | 重複使用、模組化設計 |
七、繪圖基礎:plot 函式
MATLAB 的 plot 函式主要用於建立二維線圖,是資料視覺化最常見的入門工具。
最基本語法
x = 0:0.1:2*pi;
y = sin(x);
plot(x, y)
title('正弦函數')
xlabel('x')
ylabel('sin(x)')
grid on
加入線型、顏色與標記
plot(x, y, '--o', 'LineWidth', 2, 'MarkerSize', 6)
常見自訂參數包含:
完整小範例:畫出 sin 與 cos
x = 0:0.1:2*pi;
y1 = sin(x);
y2 = cos(x);
plot(x, y1, '-b', 'LineWidth', 2)
hold on
plot(x, y2, '--r', 'LineWidth', 2)
legend('sin(x)', 'cos(x)')
title('三角函數比較')
xlabel('角度(弧度)')
ylabel('函數值')
grid on
hold off
繪圖學習重點
title()設定圖表標題。xlabel()與ylabel()設定座標軸名稱。legend()加入圖例。grid on開啟格線,方便閱讀圖形。hold on讓多條曲線畫在同一張圖上。
八、範例應用例子
真正學會一門語言,不只是知道語法,而是能用它解決問題。以下提供三個很適合初學者實作的 MATLAB 小專案。
範例一:成績分析
scores = [78 85 92 67 88 95 73];
avgScore = mean(scores);
maxScore = max(scores);
minScore = min(scores);
highScores = scores(scores >= 85);
fprintf("平均分數:%.2f\n", avgScore);
fprintf("最高分:%d\n", maxScore);
fprintf("最低分:%d\n", minScore);
disp("高分名單:");
disp(highScores);
這個例子結合了向量、函式、邏輯索引與輸出,是資料分析最基礎但很常見的模式。
範例二:聯立方程求解
A = [2 1; 1 -1];
b = [7; 1];
x = A \ b;
disp("解向量 x 為:");
disp(x);
這裡使用 \ 做矩陣左除,MATLAB 會依照線性代數方法求解方程組。
範例三:函數繪圖與數值觀察
x = -10:0.1:10;
y = x.^2 - 4*x + 3;
plot(x, y, 'm', 'LineWidth', 2)
title('二次函數 y = x^2 - 4x + 3')
xlabel('x')
ylabel('y')
grid on
這個例子會讓你熟悉冒號建立向量、元素次方 .^ 與基本視覺化流程。
延伸練習建議
九、互動小測驗
完成下列題目,檢查你是否真正掌握了 MATLAB 的核心觀念。
plot(x,y)?x = 1:2:9,則 x 的結果為何?