MATLAB程式设计入门篇程式流程控制

上传人:s9****2 文档编号:568495484 上传时间:2024-07-24 格式:PPT 页数:17 大小:338.97KB
返回 下载 相关 举报
MATLAB程式设计入门篇程式流程控制_第1页
第1页 / 共17页
MATLAB程式设计入门篇程式流程控制_第2页
第2页 / 共17页
MATLAB程式设计入门篇程式流程控制_第3页
第3页 / 共17页
MATLAB程式设计入门篇程式流程控制_第4页
第4页 / 共17页
MATLAB程式设计入门篇程式流程控制_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《MATLAB程式设计入门篇程式流程控制》由会员分享,可在线阅读,更多相关《MATLAB程式设计入门篇程式流程控制(17页珍藏版)》请在金锄头文库上搜索。

1、MATLAB 程式設計入門篇程式流程控制張智星http:/www.cs.nthu.edu.tw/jang清大資工系 多媒體檢索實驗室MATLAB 程式設計入門篇:程式流程控制16-1 迴圈指令nMATLAB 提供兩種迴圈指令,一種是 for 迴圈(For Loop),另一種是 while 迴圈(While Loop)。nfor 迴圈的使用語法如下: for 變數 = 向量, 運算式 endn其中變數的值會被依次設定為向量的每一個元素值,來執行介於 for和 end 之間的運算式。n另一種 for 迴圈的使用語法如下:for 變數 = 矩陣,運算式 endn此時變數的值會被依次設定為矩陣的每一個

2、直行,來執行介於 for 和 end 之間的運算式。nwhile 迴圈使用語法如下:while 條件式運算式;endMATLAB 程式設計入門篇:程式流程控制程式流程控制之範例一n下列 for 迴圈會產生一個長度為 6 的調和數列(Harmonic Sequence):n範例16-1 : forLoop01.mx = zeros(1,6);% 變數 x 是一個 16 大小的零矩陣 for i = 1:6x(i) = 1/i;endx% 顯示 xx = 1.0000 0.5000 0.3333 0.2500 0.2000 0.1667n在上例中,矩陣 x 最初是一個 16 大小的零矩陣,在 fo

3、r 迴圈中,變數 i 的值依次是 1 到 6,因此矩陣 x 的第 i 個元素的值依次被設為 1/i。n我們接著可用分數形式來顯示此數列: format rat% 使用分數形式來顯式數使用分數形式來顯式數值值 disp(x) 1 1/2 1/3 1/4 1/5 1/6MATLAB 程式設計入門篇:程式流程控制程式流程控制之範例二nfor 迴圈可以是多層或巢狀式(Nested)的,在下例中即產生一個 66 的Hilbert 矩陣 h,其中為於第 i 列、第 j 行的元素為 :n範例16-2 : forLoop02.mh = zeros(6);% 變數 x 是一個 66 大小的零矩陣for i =

4、1:6for j = 1:6h(i,j) = 1/(i+j-1);endendformat rat% 使用分數形式來顯式所有數值h% 顯示 hh = 1 1/2 1/3 1/4 1/5 1/6 1/2 1/3 1/4 1/5 1/6 1/7 1/3 1/4 1/5 1/6 1/7 1/8 1/4 1/5 1/6 1/7 1/8 1/9 1/5 1/6 1/7 1/8 1/9 1/10 1/6 1/7 1/8 1/9 1/10 1/11MATLAB 程式設計入門篇:程式流程控制程式流程控制之範例三n在下例中,for 迴圈列出先前產生的 Hilbert 矩陣的每一直行的平方和:n範例16-3 :

5、forLoop01.mformat short% 回到預設形式來顯式所有數值for i = hdisp(norm(i)2); % 印出每一行的平方和End1.49140.51180.27740.17870.12620.0944n在上例中,由於 h 是一個矩陣,因此每一次 i 的值就是矩陣 h 的一直行的內容。MATLAB 程式設計入門篇:程式流程控制程式流程控制之範例四n若要跳出 for 迴圈,可用 break 指令。例如,若要找出最小的 n 值,滿足 n! 10100,可輸入如下:n範例16-4 : break01.mfor i = 1:1000if prod(1:i) 1e100fprin

6、tf(%g! = %e 1e100n, i, prod(1:i);break;% 跳出 for 迴圈endend70! = 1.197857e+100 1e100 MATLAB 程式設計入門篇:程式流程控制程式流程控制之範例五n在一個迴圈內若要直接跳至到此迴圈下一回合的執行,可使用 continue 指令。n範例16-5 : continue01.mx = 1 -2 3 -4 5;posTotal = 0;for i = 1:length(x)if x(i)0, continue; end % 若 x(i) 小於零,跳到此迴圈的下一回合posTotal=posTotal+x(i);endpos

7、Total% 顯示 posTotal 的值posTotal = 9n上述範例中,我們計算向量 x 的正元素的總和,因此只要遇到 x(i) 是負數,即可使用 continue 指令來直接跳到此迴圈的下一個回合來繼續執行。Continue 指令從MATLAB 6.x 才開始支援,若是使用 MATLAB 5.x,可用 ifthenelse 來達到相同的功能。MATLAB 程式設計入門篇:程式流程控制程式流程控制之範例六n先前產生調和數列的例子,亦可用 while 迴圈改寫如下:n範例16-6 : while01.mx = zeros(1,6);i = 1;while i 10100 ,可輸入如下:n

8、範例16-7 : while02.mn = 1;while prod(1:n) 1e100n, n, prod(1:n);70! = 1.197857e+100 1e100 n與前述的 for 迴圈相同,在任何時刻若要跳出 while 迴圈,亦可使用 break 指令;若要跳到下一回合的 while 迴圈,也可以使用 continue 指令。n無論是 for 或 while 迴圈,均會降低 MATLAB 的執行速度,因此盡量使用向量化的運算(Vectorized Operations)而盡量少用迴圈。nbreak 指令若用在多重迴圈中,每次只跳出包含break指令的最內部迴圈。MATLAB 程

9、式設計入門篇:程式流程控制16-2 條件指令nMATLAB 支援二種條件指令(Branching Command,或中譯成分支指令),一種是 if-then-else 條件指令,另一種是 MATLAB 在第五版之後開始支援的 switch - case - otherwise 條件指令,以下分述之。n最常用的條件指令是 if - then - else,其使用語法為:if條件式運算式一;else運算式二;endn當條件式成立時,MATLAB 將執行運算式一,否則,就執行運算式二。若不需使用運算式二,則可直接省略 else 和運算式二。 MATLAB 程式設計入門篇:程式流程控制程式流程控制之範

10、例八n在數值運算的過程中,若變數值為 NaN(即 Not A Number )時,我們要立刻印出警告訊息,可輸入如下例:n範例16-8 : if01.mx = 0/0;if isnan(x)disp(Warning: NaN detected!);endWarning: Divide by zero.Warning: NaN detected!n在上例中,第一個警告訊息是 MATLAB 自動產生的,第二個警告訊息則是我們的程式碼產生的,其中 isnan(x) 可用於判斷 x 是否為 NaN,若是,則傳回 1(真),否則即傳回 0(偽)。MATLAB 程式設計入門篇:程式流程控制程式流程控制之範

11、例九n在下例中,我們可根據向量 y 的元素值為奇數或偶數,來顯示不同的訊息:n範例16-9 : if02.my = 0 3 4 1 6;for i = 1:length(y)if rem(y(i), 2)=0fprintf(y(%g) = %g is even.n, i, y(i);elsefprintf(y(%g) = %g is odd.n, i, y(i);endendy(1) = 0 is even.y(2) = 3 is odd.y(3) = 4 is even.y(4) = 1 is odd.y(5) = 6 is even. n上述的 if - then - else 為雙向條件

12、,亦即程式只會執行運算式一或運算式 二,不會有第三種可能。MATLAB 程式設計入門篇:程式流程控制程式流程控制之範例十nMATLAB 亦可執行多向條件,若要進行更多向的條件,只需一再重覆 elseif 即可。例如,欲判斷 y 向量之元素是屬於 3n、3n1、 或 3n+2,可輸入如下:n範例16-10 : if03.my = 3 4 5 9 2;for i = 1:length(y)if rem(y(i),3)=0fprintf(y(%g)=%g is 3n.n, i, y(i);elseif rem(y(i), 3)=1fprintf(y(%g)=%g is 3n+1.n, i , y(i

13、);elsefprintf(y(%g)=%g is 3n+2.n, i , y(i);endendy(1)=3 is 3n.y(2)=4 is 3n+1.y(3)=5 is 3n+2.y(4)=9 is 3n.y(5)=2 is 3n+2.MATLAB 程式設計入門篇:程式流程控制switch-case-otherwise 指令nMATLAB 在第五版開始支援 switch-case-otherwise 的多向條件指令,其使用語法如下:switch expressioncase value(1) statement(1)case value(2) statement(2)case value(

14、n-1) statement(n-1)otherwise statement(n)endn在上述語法中,expression 為一數值或字串,當其值和 value(k) 相等時,MATLAB 即執行 statement(k) 並跳出 switch 指令。若 expression 不等於 value(k),k=1, 2, , n-1,則 MATLAB 會執行 statement(n) 並跳出 switch 指令。 MATLAB 程式設計入門篇:程式流程控制程式流程控制之範例十一n欲根據月份來判斷其季別,可輸入如下:n 範例16-11 : switch01.mfor month = 1:12swi

15、tch monthcase 3,4,5season = Spring;case 6,7,8season = Summer;case 9,10,11season = Autumn;case 12,1,2season = Winter;endfprintf(Month %d = %s.n, month, season);endMonth 1 = Winter. . . . . . .Month 12 = Winter.MATLAB 程式設計入門篇:程式流程控制程式流程控制之範例十二n如果 expression 是字串,那麼若要在 case 之後比對多個字串,就必需使用字串的異值陣列(Cell Ar

16、rey of Strings):n範例16-12 : switch02.mmonth = Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep;for i = 1:length(month)switch monthicase Mar,Apr,Mayseason = Spring;case Jun,Jul,Augseason = Summer;case Sep,Oct,Novseason = Autumn;case Dec,Jan,Febseason = Winter;endfprintf(%s is %s.n, monthi, season);endMATLA

17、B 程式設計入門篇:程式流程控制程式流程控制之範例十二n上述範例output如下:Jan is Winter.Feb is Winter.Mar is Spring.Apr is Spring.May is Spring.Jun is Summer.Jul is Summer.Aug is Summer.Sep is Autumn.nMATLAB 的 switch 指令和 C 語言的 switch 指令略有差別:在 C 語言的 switch 敘述內,每個 case 敘述需加上 break 以跳出該 switch 敘述,而在 MATLAB 則不必多此一舉。n一般而言,switchcaseotherwise 的執行效率優於 ifthenelse 。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号