MATLAB 編程語言詳細教學網站

MATLAB 是以矩陣與陣列運算為核心的程式語言,非常適合數值計算、資料分析、演算法實作、科學研究與工程模擬。 本網站以繁體中文逐步說明最重要的學習路線:先學會指令與變數,再理解矩陣、索引、控制流程、函式設計與繪圖, 最後透過實際範例與測驗把觀念真正內化。

適合初學者 單頁教學網站 含可執行範例 含互動小測驗 繁體中文整理

你會學到什麼

從變數、註解、矩陣建立,到條件判斷、迴圈、函式撰寫與繪圖,建立完整入門知識地圖。

為什麼 MATLAB 特別

它不像許多語言只處理單一數值,而是天然以向量、矩陣與陣列做計算,這讓科學與工程工作更直覺。

如何使用本頁

建議照章節順序閱讀,先理解語法,再執行範例,最後完成測驗。若你已具基礎,可直接跳到應用實作。

MATLAB 學習地圖

官方文件指出 MATLAB 的語言基礎涵蓋輸入指令、矩陣與陣列、資料型別、運算子,以及迴圈與條件判斷。 這些就是新手最應優先掌握的主軸。

第一階段:語法基礎

學會變數、輸出、註解、運算與顯示結果。

第二階段:矩陣思維

理解 MATLAB 最核心的矩陣、陣列建立、索引與元素運算。

第三階段:寫出完整程式

掌握流程控制、Script、Function、繪圖與資料分析應用。

觀念提醒: MATLAB 名稱本身來自 Matrix Laboratory,也就是「矩陣實驗室」的概念,所以學習時一定要用「向量/矩陣思維」看待資料。

一、基本語法教學

這一節先建立你對 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 對括號與陣列格式很敏感,尤其是矩陣中每一列之間要用分號,元素之間通常用空格或逗號分隔。

二、矩陣與陣列

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×1 陣列。

三、索引與冒號運算子

官方文件指出,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 分的成績抓出來,非常適合資料篩選任務。

記憶口訣: A(:,n) 代表「所有列的第 n 欄」, A(m,:) 代表「第 m 列的所有欄」, A(:) 代表「把整個矩陣攤平成單一直欄向量」。

四、運算子與矩陣思維

MATLAB 同時支援「陣列逐元素運算」與「線性代數矩陣運算」,這是初學者最容易混淆、也是最需要掌握的一節。

類型 運算子 說明 例子
加減 + - 加減法在陣列與矩陣中形式相同 A + B
矩陣乘法 * 遵守線性代數規則 A * B
元素乘法 .* 對應位置相乘 A .* B
矩陣除法 / \ 求解矩陣方程常用 A \ b
元素除法 ./ .\ 逐元素相除 A ./ B
矩陣次方 ^ 矩陣乘方 A^2
元素次方 .^ 每個元素各自做冪次 A.^2
轉置 ' .' ' 為共軛轉置,.' 為純轉置 A'
超重要提醒: 點號 . 幾乎代表「逐元素」運算。 例如 .*./.^。 如果你本來是要對每個元素平方,卻寫成 A^2,就可能得到完全不同的結果。

矩陣乘法

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 的條件與迴圈結構主要包含 ifswitchforwhile

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
輸入參數 沒有 可定義
輸出值 通常直接產生變數 可明確回傳
工作區 基礎工作區 獨立工作區
彈性 較低 較高
適用情境 快速試驗、流程操作 重複使用、模組化設計
建議: 當你只是想快速測試想法時,用 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)

常見自訂參數包含:

LineWidth Color Marker MarkerSize MarkerEdgeColor MarkerFillColor
理解方式: plot(X, Y) 就是把 Y 對應到 X 畫出來; 若只寫 plot(Y),MATLAB 會自動用索引位置作為 x 軸。

完整小範例:畫出 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

這個例子會讓你熟悉冒號建立向量、元素次方 .^ 與基本視覺化流程。

延伸練習建議

讀取實驗數據後畫圖 計算平均值與標準差 用 for 迴圈產生九九乘法表 寫一個計算圓面積的 function 用 logical indexing 篩出異常值

九、互動小測驗

完成下列題目,檢查你是否真正掌握了 MATLAB 的核心觀念。

1. 在 MATLAB 中,哪個符號可以讓程式執行後不顯示結果?
2. 下列哪一個語法表示「取矩陣 A 的第 2 欄全部資料」?
3. 若要做逐元素乘法,應使用哪個運算子?
4. 哪個結構最適合處理「重複次數已知」的情況?
5. 下列哪一個比較符合 Function 的特性?
6. 下列哪個敘述正確描述 plot(x,y)
7. 若 x = 1:2:9,則 x 的結果為何?
8. 若要從陣列中取出所有大於 10 的元素,最適合使用哪種技巧?