MATLAB 提供兩種迴圈指令,一種是 for 迴圈(For Loop),另一種是 while 迴圈(While Loop)。for 迴圈的使用語法如下:
for 變數 = 向量,
運算式
end
其中變數的值會被依次設定為向量的每一個元素值,來執行介於 for和 end 之間的運算式。另一種 for 迴圈的使用語法如下:
for 變數 = 矩陣,
運算式
end
此時變數的值會被依次設定為矩陣的每一個直行,來執行介於 for 和 end 之間的運算式。
舉例來說,下列 for 迴圈會產生一個長度為 6 的調和數列(Harmonic Sequence):
在上例中,矩陣 x 最初是一個 1×6 大小的零矩陣,在 for 迴圈中,變數 i 的值依次是 1 到 6,因此矩陣 x 的第 i 個元素的值依次被設為 1/i。其中用到的 format rat,可讓我們使用有理數形式來顯示此數列,換句話說,就是將一個數值表示成 pq,而且 p 和 q 都是整數。
for 迴圈可以是多層或巢狀式(Nested)的,在下例中即產生一個 6×6 的 Hilbert 矩陣 h,其中為於第 i 列、第 j 行的元素為 :
在上面的例子,我們使用zeros指令來預先配置(Allocate)了一個適當大小的矩陣。若不預先配置矩陣,程式仍可執行,但此時MATLAB需要動態地增加(或減小)矩陣的大小,因而降低程式的執行效率。所以在使用一個矩陣時,若能在事前知道其大小,則最好先使用zeros或ones等指令來預先配置給矩陣所需的記憶體大小。(有關程式碼的最佳化及記憶體的管理,請參見本書姊妹作「MATLAB 程式設計:進階篇」的第二章「程式碼與記憶體之最佳化」。)
在下例中,for 迴圈列出先前產生的 Hilbert 矩陣的每一直行的平方和:
在上例中,由於 h 是一個矩陣,所以每一次 i 的值就是矩陣 h 的一直行的內容,所以寫出來的指令特別簡潔。
若要跳出 for 迴圈,可用 break 指令。例如,若要找出最小的 n 值,滿足 n! > 10100,可輸入如下:
在一個迴圈內,若要直接跳至到此迴圈下一回合的執行,可以使用 continue 指令,此指令的功能類似於 C 語言的 continue 敘述,或是 Perl 語言的 next 敘述。範例如下:
在上述範例中,我們計算向量 x 的正元素的總和,因此只要遇到 x(i) 是負數,我們就可以使用 continue 指令來直接跳到此迴圈的下一個回合來繼續執行。Continue 指令是從MATLAB 6.x 才開始支援,如果你是使用 MATLAB 5.x,就沒有此指令可供使用,但是我們還是可以使用 if–then–else 的條件指令來達到相同的功能。
另一個常用到的迴圈指令是 while 迴圈,其使用語法為:
while 條件式
運算式;
end
也就是說,只要條件式成立,運算式就會一再被執行。例如:先前產生調和數列的例子,亦可用 while 迴圈改寫如下:
若要用 while 指令找出最小的 n 值,使得 n! > 10100 ,可輸入如下:
與前述的 for 迴圈相同,在任何時刻若要跳出 while 迴圈,亦可使用 break 指令;若要跳到下一回合的 while 迴圈,也可以使用 continue 指令。但必須特別注意的是,break 指令若用在多重迴圈中,每次只跳出包含break指令的最內部迴圈。
無論是 for 或 while 迴圈,均會降低 MATLAB 的執行速度,所以我們應盡量使用向量化的運算(Vectorized Operations)而盡量少用迴圈。(有關向量化的運算,請參見本書解妹作「MATLAB 程式設計:進階篇」的第二章「程式碼與記憶體之最佳化」。)
MATLAB程式設計:入門篇