欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

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

    • 资源ID:5439243       资源大小:338.97KB        全文页数:17页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    MATLAB 程式設計入門篇程式流程控制,張智星http:/www.cs.nthu.edu.tw/jang清大資工系 多媒體檢索實驗室,16-1 迴圈指令,MATLAB 提供兩種迴圈指令,一種是 for 迴圈(For Loop),另一種是 while 迴圈(While Loop)。for 迴圈的使用語法如下:for 變數=向量,運算式 end其中變數的值會被依次設定為向量的每一個元素值,來執行介於 for和 end 之間的運算式。另一種 for 迴圈的使用語法如下:for變數=矩陣,運算式 end此時變數的值會被依次設定為矩陣的每一個直行,來執行介於 for 和 end 之間的運算式。while 迴圈使用語法如下:while 條件式運算式;end,程式流程控制之範例一,下列 for 迴圈會產生一個長度為 6 的調和數列(Harmonic Sequence):範例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.1667在上例中,矩陣 x 最初是一個 16 大小的零矩陣,在 for 迴圈中,變數 i 的值依次是 1 到 6,因此矩陣 x 的第 i 個元素的值依次被設為 1/i。我們接著可用分數形式來顯示此數列:format rat%使用分數形式來顯式數值 disp(x)1 1/2 1/3 1/4 1/5 1/6,程式流程控制之範例二,for 迴圈可以是多層或巢狀式(Nested)的,在下例中即產生一個 66 的Hilbert 矩陣 h,其中為於第 i 列、第 j 行的元素為:範例16-2:forLoop02.mh=zeros(6);%變數 x 是一個 66 大小的零矩陣for i=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/11,程式流程控制之範例三,在下例中,for 迴圈列出先前產生的 Hilbert 矩陣的每一直行的平方和:範例16-3:forLoop01.mformat short%回到預設形式來顯式所有數值for i=hdisp(norm(i)2);%印出每一行的平方和End1.49140.51180.27740.17870.12620.0944在上例中,由於 h 是一個矩陣,因此每一次 i 的值就是矩陣 h 的一直行的內容。,程式流程控制之範例四,若要跳出 for 迴圈,可用 break 指令。例如,若要找出最小的 n 值,滿足 n!10100,可輸入如下:範例16-4:break01.mfor i=1:1000if prod(1:i)1e100fprintf(%g!=%e 1e100n,i,prod(1:i);break;%跳出 for 迴圈endend70!=1.197857e+100 1e100,程式流程控制之範例五,在一個迴圈內若要直接跳至到此迴圈下一回合的執行,可使用 continue 指令。範例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);endposTotal%顯示 posTotal 的值posTotal=9上述範例中,我們計算向量 x 的正元素的總和,因此只要遇到 x(i)是負數,即可使用 continue 指令來直接跳到此迴圈的下一個回合來繼續執行。Continue 指令從MATLAB 6.x 才開始支援,若是使用 MATLAB 5.x,可用 ifthenelse 來達到相同的功能。,程式流程控制之範例六,先前產生調和數列的例子,亦可用 while 迴圈改寫如下:範例16-6:while01.mx=zeros(1,6);i=1;while i=6x(i)=1/i;i=i+1;endx%顯示 xx=1.0000 0.5000 0.3333 0.2500 0.2000 0.1667,程式流程控制之範例七,若要用 while 指令找出最小的 n 值,使得 n!10100,可輸入如下:範例16-7:while02.mn=1;while prod(1:n)1e100n,n,prod(1:n);70!=1.197857e+100 1e100 與前述的 for 迴圈相同,在任何時刻若要跳出 while 迴圈,亦可使用 break 指令;若要跳到下一回合的 while 迴圈,也可以使用 continue 指令。無論是 for 或 while 迴圈,均會降低 MATLAB 的執行速度,因此盡量使用向量化的運算(Vectorized Operations)而盡量少用迴圈。break 指令若用在多重迴圈中,每次只跳出包含break指令的最內部迴圈。,16-2 條件指令,MATLAB 支援二種條件指令(Branching Command,或中譯成分支指令),一種是 if-then-else 條件指令,另一種是 MATLAB 在第五版之後開始支援的 switch-case-otherwise 條件指令,以下分述之。最常用的條件指令是 if-then-else,其使用語法為:if條件式運算式一;else運算式二;end當條件式成立時,MATLAB 將執行運算式一,否則,就執行運算式二。若不需使用運算式二,則可直接省略 else 和運算式二。,程式流程控制之範例八,在數值運算的過程中,若變數值為 NaN(即 Not A Number)時,我們要立刻印出警告訊息,可輸入如下例:範例16-8:if01.mx=0/0;if isnan(x)disp(Warning:NaN detected!);endWarning:Divide by zero.Warning:NaN detected!在上例中,第一個警告訊息是 MATLAB 自動產生的,第二個警告訊息則是我們的程式碼產生的,其中 isnan(x)可用於判斷 x 是否為 NaN,若是,則傳回 1(真),否則即傳回 0(偽)。,程式流程控制之範例九,在下例中,我們可根據向量 y 的元素值為奇數或偶數,來顯示不同的訊息:範例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.上述的 if-then-else 為雙向條件,亦即程式只會執行運算式一或運算式 二,不會有第三種可能。,程式流程控制之範例十,MATLAB 亦可執行多向條件,若要進行更多向的條件,只需一再重覆 elseif 即可。例如,欲判斷 y 向量之元素是屬於 3n、3n1、或 3n+2,可輸入如下:範例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);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.,switch-case-otherwise 指令,MATLAB 在第五版開始支援 switch-case-otherwise 的多向條件指令,其使用語法如下:switch expressioncase value(1)statement(1)case value(2)statement(2)case value(n-1)statement(n-1)otherwise statement(n)end在上述語法中,expression 為一數值或字串,當其值和 value(k)相等時,MATLAB 即執行 statement(k)並跳出 switch 指令。若 expression 不等於 value(k),k=1,2,n-1,則 MATLAB 會執行 statement(n)並跳出 switch 指令。,程式流程控制之範例十一,欲根據月份來判斷其季別,可輸入如下:範例16-11:switch01.mfor month=1:12switch 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.,程式流程控制之範例十二,如果 expression 是字串,那麼若要在 case 之後比對多個字串,就必需使用字串的異值陣列(Cell Arrey of Strings):範例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);end,程式流程控制之範例十二,上述範例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.MATLAB 的 switch 指令和 C 語言的 switch 指令略有差別:在 C 語言的 switch 敘述內,每個 case 敘述需加上 break 以跳出該 switch 敘述,而在 MATLAB 則不必多此一舉。一般而言,switchcaseotherwise 的執行效率優於 ifthenelse。,

    注意事项

    本文(MATLAB程式设计入门篇程式流程控制.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开