Matlab 基礎知識-6

程式控制流程

Matlab 的流程控制和 C 語言類似,if 和 switch 作為條件判斷,相當於流程圖的菱形框,for 和 while 作為迴圈,相當於流程圖的反向箭頭。

if 判斷

1
2
3
4
5
6
7
if 邏輯變數1
執行語句1
elseif 邏輯變數2
執行語句2
else
執行語句3
end

其含義與 C 語言中一致,是順序判斷,即逐個 if 或者 elseif 進行判斷,若邏輯變數為 1,則執行語句,若為 0則進行下一個判斷。其中邏輯變數經常用多個邏輯變數的邏輯運算結果來代替,例如我們經常看到的是。

1
if x>1 && y>1

而不是先賦值再判斷。

1
2
a=(x>1) && (y>1)
if a

switch 判斷

1
2
3
4
5
6
7
8
switch 數值變數1
case 數值1
執行語句1
case 數值2
執行語句2
otherwise
執行語句3
end

switch 與 if 最大的不同是,switch 只進行一次判斷,即根據數值變數 1 的值來決定執行哪一個 case,而不像 if 會判斷多個 elseif。需要強調的是,只有當數值變數 1== 數值 1 時,才會執行語句 1,而之前說過,== 這個判斷是有舍入誤差的,因此 switch 一般用於數值變數 1 只取整數時,比如 sfun 的判斷。

for 迴圈

  1. 是最常用到的重複運算
  2. 迴圈變數會依取用每個「行向量 (Column Vectors)」來進行運算
1
2
3
for 變數 = 向量
執行語句;
end

其含義是,變數會取行向量中的每一個值,然後執行語句,在執行語句中,變數是一個 1×1 的矩陣。比如 for a=[0 1 3]
在語句中會讓 a=0,執行語句,然後 a=1,執行語句,最後 a=3,執行語句。這裡容易和賦值語句混淆,因為 a=[0 1 3] 是一個數值變數賦值,賦值後 a 是個向量,但加上了 for 後,a 就會是一個 1×1 矩陣。另外,在數值變數賦值那段,我們說過有一種常用的賦值方法是 a=初始值:步長:終值,其結果是把 a 賦值成一個向量,因此這也廣泛用於 for 語句中。e.g. for a=初始值:步長:終值

以下為範例

1
2
3
4
5
>> a = magic(3)		% 魔法方陣
a =
8 1 6
3 5 7
4 9 2
1
2
3
>> for i = a
i
end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
i =
8
3
4

i =
1
5
9

i =

6
7
2

>>

while 迴圈

1
2
3
while 邏輯變數
執行語句
end

其含義是,當邏輯變數為 1 時,執行語句,直到邏輯變數為 0,因此 while 的執行語句中,一定有改變邏輯變數的部分,否則就是死循環。比如寫了 while a<10,就一定會在執行語句中有類似 a=a+1 這樣的賦值語句,使得若干次循環後,邏輯變數就會為 0。