現在我們知道 Matlab 套裝軟體提供了一套程式語言, 也學會了使用這套語言寫出 for 或 while 迴圈。 但是卻要提醒讀者:非不得已,不要用 Matlab 的迴圈! Matlab 是一個陣列導向套裝軟體,它的最大強處就是高效能的陣列導向計算, 一旦用迴圈寫了指令或腳本程式,它的效能就降低了。 所以,
用 Matlab 寫 for 或 while 迴圈只是個方便法門, 可以用來解決簡單問題或者練習 for 或 while 迴圈的概念, 在 Matlab 中應盡量使用高效能的內建算子與函式,而避免迴圈。 如果非要迴圈不可,應考慮使用編譯式程式語言,例如 C 語言。
如何比較內建算子與函式和迴圈的效能?我們可以利用 tic (滴) toc (答) 這一對指令。 tic 就是把 Matlab 內建的碼表歸零、開始計時; 這個指令不會輸出任何答案。 toc 就是把碼表停止,並輸出計時的結果。讀者不妨試試看
tic toc看到一個數,譬如 0.7963,這就是您從鍵盤輸入 t 和 o 和 c 和 [Enter] 所經過的時間,以秒而單位。
利用 tic 和 toc, 我們可以替 Matlab 的工作時間計時。 以一個簡單而無聊的計算為例:計算
1 + 2 + 3 + ... + 10000我們知道答案是 50005000,也有簡單的公式可以用,但是故意不用, 試試看 Matlab 的計算效能。
首先,利用 Matlab 算子 1:10000 產生
[1, 2, 3, ... 10000]序列,然後利用 Matlab 內建函式 sum 計算總和, 答案放在變數 n 裡面,計時結束後印出答案檢查一下。 以下是 Matlab 的一列指令:
tic; n=sum(1:10000); toc, n在我目前工作的電腦上,Matlab 花費的時間是 4.12 * 10-4 秒。
再來,我們用一個標準的 for 迴圈技巧來做同樣的計算:
tic;n=0; for k=1:10000, n=n+k; end; toc, n答案當然也正確,但是在我目前工作的電腦上,Matlab 花費的時間是 0.0451 秒, 大約是前者的 109 倍!
雖然上述兩個例子花費的時間都很短 (不到 1/10 秒), 但是重點是:使用迴圈花費了 109 倍的時間。 如果計算問題更複雜,則這個倍數就會大大延長計算的時間, 而我們也就浪費了寶貴的時間。
習題