第六讲 Matlab控制流_第1页
第六讲 Matlab控制流_第2页
第六讲 Matlab控制流_第3页
第六讲 Matlab控制流_第4页
第六讲 Matlab控制流_第5页
已阅读5页,还剩22页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Matlab控制流1、for循环结构 for循环结构的语法形式为: for x=array (commands) end 其中,for指令后的变量x称为循环变量,而for与end之间的组命令称为循环体。循环体被重复执行的次数是确定的,该次数由for指令后面的数组array的列数决定。换言之,循环变量依次取数组的各列,对于每个变量值,循环体被执行一次。例例1一个简单的一个简单的for循环示例。循环示例。for i=1:10; %i依次取依次取1,2,10 x(i)=i; %对每个对每个i值,重复执行由该指令构成的循环体值,重复执行由该指令构成的循环体end; x %要求显示运行后数组要求显示运行

2、后数组x的值的值x = 1 2 3 4 5 6 7 8 9 10 说明:循环不会因为在循环体内对循环变量重新置值而中说明:循环不会因为在循环体内对循环变量重新置值而中断;在断;在for后面的表达式中的数组可以为任何合法的后面的表达式中的数组可以为任何合法的Matlab数数组;循环结构可以嵌套使用;为了得到高效代码,应尽量提高组;循环结构可以嵌套使用;为了得到高效代码,应尽量提高代码的向量化程度,而避免使用循环结构;为了得到高效代代码的向量化程度,而避免使用循环结构;为了得到高效代码,在循环指令之前应尽量对数组进行预定义。码,在循环指令之前应尽量对数组进行预定义。2、while循环结构while

3、循环结构的语法形式为: while expression (commands) end 在while和end之间的“组命令”被称为循环体。当Matlab碰到while指令时,首先检测expression的值,如其值为逻辑真(非零),则执行组命令。当组命令执行完毕,继续检测表达式的值,若表达式值仍为真,循环执行组命令;而一旦表达式值为假时,结束循环。例2 Fibonacci数组的元素满足Fibonacci 规则: ;且 。现要求该数组中第一个大于10000的元素。 a(1)=1;a(2)=1;i=2;while a(i)8 sums=number*0.95*cost;end,sums sums

4、= 114.0000 例4 用for循环指令来寻求Fibonacc数组中第一个大于10000的元素。n=100;a=ones(1,n);for i=3:n a(i)=a(i-1)+a(i-2); if a(i)=10000 a(i), break; %跳出所在的一级循环跳出所在的一级循环 end;end,i ans = 10946i = 21 4、switch-case结构 switch-case指令的一般语法结构形式如下:switch ex ex为一标量或字符串 case test1 (commands 1) 当ex等于test1时,执行组命令1,然后跳 出该结构 case test2 ca

5、se testk (commands k) 当ex等于testk时,执行该组命令k,然后 跳出该结构 otherwise otherwise指令可以不存在 (commands) 表达式不等于前面所有检测值时,则执行 该组命令end 当遇到switch结构时,Matlab将表达式的值依次和各个case指令后面的检测值进行比较。如果比较结果为假,则取下一个检测值再来比较,而一旦比较结果为真,Matlab将执行相应的一组命令,然后跳出该结构。如果所有的比较结构都为假,即表达式的值和所有的检测值都不等,Matlab将执行otherwise后面的一组命令,由此可见上述结构保证了至少有一组命令会得到执行。

6、 switch指令后面的表达式应为一个标量或者为一个字符串。对于标量形式的表达式,比较这样进行:表达式=检测值i。而对于字符串,Matlab将调用函数strcmp来实现比较:strcmp(表达式,检测值i)。 strcmp用来比较两个字符串是否完全相同 比如: a = 学生;b = 学生; strcmp(a,b)ans =1 返回1,则表示两个字符串是相同的;否则就不同 case指令后面的检测值不仅可以为一个标量值或一个字符串,还可以为一个元胞数组。如果一个检测值时一个元胞数组,Matlab将把表达式的值和该元胞数组中的所有元素进行比较,如果元胞数组中某个元素和表达式的值相等,Matlab认为

7、此次比较结果为真,从而执行与该检测值相应的一组命令。 元胞数组是MATLAB中特有的一种数据类型,是数组的一种,其内部元素可以是属于不同的数据类型,概念理解上,可以认为它和c语言里面的结构体、c+里面的对象很类似。matlab中用char(n)来定义,当然最基本的是包裹式定义,比如先定义了一个字符型的变量a,并赋值,然后定义一个长整型b,并赋值最后用大括号来打包裹c=a,b来形成元胞c,当然进一步可以将c再包裹进去如d=a,b,c,abc,123都是合法的。 v例例4 学生的成绩管理,用来演示学生的成绩管理,用来演示switch结构的应用。结构的应用。vclear;v%划分区域:满分(划分区域

8、:满分(100),优秀(),优秀(90-99),良好(),良好(80-89),及格(),及格(60-79),不及格(),不及格(60)vfor i=1:10;ai=89+i;bi=79+i;ci=69+i;di=59+i;end;c=d,c;vName= Jack,Marry,Peter, Rose, Tom;vMark=72,83,56,94,100;Rank=cell(1,5);v%创建一个含创建一个含5个元素的框架数组个元素的框架数组S,它有三个域,它有三个域vS=struct(Name,Name,Marks,Mark,Rank,Rank);v%根据学生的分数,求出相应的等级根据学生的分

9、数,求出相应的等级vfor i=1:5v switch S(i).Marksv case 100 v S(i).Rank=满分满分;v case av S(i).Rank= 优秀优秀;v case b v S(i).Rank= 良好良好;v case c v S(i).Rank= 及格及格;v otherwise v S(i).Rank=不及格不及格;v endvend %将学生姓名,得分,登记等信息打印出来。disp(学生姓名学生姓名 , 得分得分 , 等级等级);disp( )for i=1:5;disp(S(i).Name,blanks(6),num2str(S(i).Marks),bl

10、anks(6),S(i).Rank);end; Matlab的switch指令不同于C语言的switch指令。当matlab检测到某个检测值和表达式的值相等,将执行相应的一组命令,执行完毕,自动跳出switch结构,而无需使用break指令。5、try-catch结构 try-catch指令的语法结构形式如下: try (commands 1) 组命令1总被执行。若正确,则跳出此结构 catch (commands 2) 仅当组命令1出现执行错误,组命令2才被 执行 end 只有当Matlab在执行组命令1时出现了错误后,组命令2才会被执行。 可调用lasterr函数查询出错原因。如果函数la

11、sterr的运行结果为一个空串,则表明组命令1被成功执行了。 当执行组命令2时又出错,Matlab将终止该结构。例5 try-catch结构应用实例:对 魔方阵的行进行援引,当“行下标”超出魔方阵的最大行数时,将改向对最后一行的援引,并显示“出错”警告。clear,N=4;A=magic(3); %设置设置3行行3列魔方阵列魔方阵Atry A_N=A(N,:) %取取A的第的第N行元素行元素catch A_end=A(end,:) %如果取如果取A(N,:)出错,则改取出错,则改取A的最后一行的最后一行endlasterr %显示出错原因显示出错原因A_end = 4 9 2ans = Ind

12、ex exceeds matrix dimensions. )33( 6、控制流的其他常用指令1)return指令 通常,当被调函数执行完后,Matlab会自动地把控制转至主调函数或者指令窗。如果在被调函数中插入了return指令,可以强制Matlab结束执行该函数并把控制转出。2)input和keyboard指令 (1)input input指令将Matlab的“控制权”暂时交给用户。此后,用户通过键盘键入数值、字符串或者表达式,并经“回车”把键入内容输入工作空间,同时把“控制权”交还给Matlab。常用的格式如下: v=input(message) 将用户键入的内容赋给变 量vv=inpu

13、t(message,s) 将用户键入的内容作为 字符串赋给变量v 指令中message是将要显示在屏幕上的字符串,这是必不可少的。 对于第一种调用格式,用户可以输入数值、字符串、元胞数组等各种形式的数据。 对于第二种调用格式,不管键入什么,总以字符串形式赋给变量v(2)keyboard 当程序遇到keyboard时,Matlab将“控制权”交给键盘,用户可以从键盘输入各种合法的Matlab指令,只有当用户使用return指令结束输入后,“控制权”才交还给程序。 它与input的不同在于:它允许输入任意多个Matlab指令,而input只能输入赋给变量的“值”,即数值、字符串或元胞数组等。3)y

14、esinput指令 yesinput指令是一个智能输入指令,它提供了一个缺省输入值,并可以对输入范围进行检查。其调用形式如下: v=yesinput(Prompt,Default,Possib)该指令涉及用户和Matlab的交互操作,因此无法在notebook中运行。 Prompt为文字提示,Default为缺省设置“值”,possib为可选“值”的范围。4)pause指令 pause 暂停执行文件,等待用户按 任意键继续 pause(n) 在继续执行之前,暂停n秒5)break指令 break指令导致包含有该指令的while、for指令的终止。通过使用break指令,可不比等待循环的自然结束

15、,而根据循环内部另设的某种条件是否满足,去决定是否退出循环。6)error和warning指令 在编写M文件时,常用的警示指令有: error(message) 显示出错信息message,终止 程序 errortrap 错误发生后,程序继续执行与否的双位 开关 lasterr 显示Matlab自动判断的最新出错原因并 终止程序 warning(message) 显示警告信息message, 程序继续运行 lastwarn 显示Matlab自动给出的最新警告,程序 继续运行v胞元数组胞元数组(cell Arry)的基本组分是胞元(cell),每个胞元本身在数组中是平等的,只能以下标区分。胞元可以存放任何类型、任何大小的数组,如任意维数值数组、字符串数组、符号对象等,而且同一个胞元数组中各胞元中的内容可以不同。与数值数组一样,胞元数组维数不受限制,可以一维、二维或更高维,不过

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论