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

下载本文档

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

文档简介

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

%要求显示运行后数组x的值x=12345678910

说明:循环不会因为在循环体内对循环变量重新置值而中断;在for后面的表达式中的数组可以为任何合法的Matlab数组;循环结构可以嵌套使用;为了得到高效代码,应尽量提高代码的向量化程度,而避免使用循环结构;为了得到高效代码,在循环指令之前应尽量对数组进行预定义。2、while循环结构while循环结构的语法形式为:whileexpression(commands)end在while和end之间的“组命令”被称为循环体。当Matlab碰到while指令时,首先检测expression的值,如其值为逻辑真(非零),则执行组命令。当组命令执行完毕,继续检测表达式的值,若表达式值仍为真,循环执行组命令;而一旦表达式值为假时,结束循环。例2Fibonacci数组的元素满足Fibonacci规则:;且。现要求该数组中第一个大于10000的元素。

a(1)=1;a(2)=1;i=2;whilea(i)<=10000 a(i+1)=a(i-1)+a(i); i=i+1;end;i,a(i),

i=21ans=10946while循环和for循环的区别在于,while循环结构的循环体被执行的次数不是确定的,而for结构中循环体的执行次数则是确定的。一般情况下,表达式的值都是标量值,但是Matlab允许它为一个数组,此时只有当该数组所有元素均为真时,Matlab才会执行循环体。如while指令后的表达式为空数组,Matlab认为表达式值为假,而不执行循环体。3、if-else-end分支结构if-else-end指令为程序流提供了一种分支结构,它有多种形式,其中最简单用法是:如果表达式expression为真,执行组命令commands,否则跳过该组命令。指令形式如下:ifexpression(commands)end如果判决条件expression为一个空数组,Matlab认为条件为假(false)。如果有两种选择,采用下面的结构:ifexpression(commands1)else(commands2)end如果选择项多于两个,采用下面的结构:ifexpression1判决表达式1(commands1)若表达式1为真时,执行组命令commands1,结束此结构elseifexpression2判决表达式2(commands2)表达式1为假,而表达式2为真,执行commands2,结束此结构……else(commandsk)当前面所有表达式均为假时,执行该组命令end表达式有时由多个逻辑子表达式组成,Matlab将尽可能少地检测这次子表达式的值。例如,表达式为:(子表达式1|子表达式2),当Matlab检测到子表达式1的值为真时,它就认为表达式值为真,而不再对子表达式2进行检测。又如,表达式为:(子表达式1&子表达式2),当Matlab检测到子表达式1的值为假时,它就认为表达式值为假的,从而跳过该结构。if指令判决和break的配合使用,可以强行终止for循环或while循环。例3一个简单的分支结构。cost=10;number=12;ifnumber>8sums=number*0.95*cost;end,sums

sums=114.0000

例4用for循环指令来寻求Fibonacc数组中第一个大于10000的元素。n=100;a=ones(1,n);fori=3:na(i)=a(i-1)+a(i-2);ifa(i)>=10000a(i),break;%跳出所在的一级循环end;end,i

ans=10946i=214、switch-case结构switch-case指令的一般语法结构形式如下:switchexex为一标量或字符串casetest1(commands1)当ex等于test1时,执行组命令1,然后跳出该结构casetest2……casetestk(commandsk)当ex等于testk时,执行该组命令k,然后跳出该结构otherwiseotherwise指令可以不存在(commands)表达式不等于前面所有检测值时,则执行该组命令end当遇到switch结构时,Matlab将表达式的值依次和各个case指令后面的检测值进行比较。如果比较结果为假,则取下一个检测值再来比较,而一旦比较结果为真,Matlab将执行相应的一组命令,然后跳出该结构。如果所有的比较结构都为假,即表达式的值和所有的检测值都不等,Matlab将执行otherwise后面的一组命令,由此可见上述结构保证了至少有一组命令会得到执行。switch指令后面的表达式应为一个标量或者为一个字符串。对于标量形式的表达式,比较这样进行:表达式==检测值i。而对于字符串,Matlab将调用函数strcmp来实现比较:strcmp(表达式,检测值i)。strcmp用来比较两个字符串是否完全相同

比如:

>>a=‘学生’;b=‘学生';

>>strcmp(a,b)

ans=

1

>>返回1,则表示两个字符串是相同的;否则就不同case指令后面的检测值不仅可以为一个标量值或一个字符串,还可以为一个元胞数组。如果一个检测值时一个元胞数组,Matlab将把表达式的值和该元胞数组中的所有元素进行比较,如果元胞数组中某个元素和表达式的值相等,Matlab认为此次比较结果为真,从而执行与该检测值相应的一组命令。元胞数组是MATLAB中特有的一种数据类型,是数组的一种,其内部元素可以是属于不同的数据类型,概念理解上,可以认为它和c语言里面的结构体、c++里面的对象很类似。matlab中用char(n)来定义,当然最基本的是包裹式定义,比如先定义了一个字符型的变量a,并赋值,然后定义一个长整型b,并赋值…最后用大括号来打包裹c={a,b}来形成元胞c,当然进一步可以将c再包裹进去如d={a,b,c,‘abc’,123}都是合法的。例4

学生的成绩管理,用来演示switch结构的应用。clear;%划分区域:满分(100),优秀(90-99),良好(80-89),及格(60-79),不及格(<60)fori=1:10;a{i}=89+i;b{i}=79+i;c{i}=69+i;d{i}=59+i;end;c=[d,c];Name={'Jack','Marry','Peter','Rose','Tom'};Mark={72,83,56,94,100};Rank=cell(1,5);%创建一个含5个元素的框架数组S,它有三个域S=struct('Name',Name,'Marks',Mark,'Rank',Rank);%根据学生的分数,求出相应的等级fori=1:5switchS(i).Markscase100S(i).Rank='满分';caseaS(i).Rank='优秀';caseb S(i).Rank='良好';casec S(i).Rank='及格';otherwise S(i).Rank='不及格';endend

%将学生姓名,得分,登记等信息打印出来。disp(['学生姓名','得分','等级']);disp('')fori=1:5;disp([S(i).Name,blanks(6),num2str(S(i).Marks),blanks(6),S(i).Rank]);end;

Matlab的switch指令不同于C语言的switch指令。当matlab检测到某个检测值和表达式的值相等,将执行相应的一组命令,执行完毕,自动跳出switch结构,而无需使用break指令。5、try-catch结构try-catch指令的语法结构形式如下:try(commands1)组命令1总被执行。若正确,则跳出此结构catch(commands2)仅当组命令1出现执行错误,组命令2才被执行end只有当Matlab在执行组命令1时出现了错误后,组命令2才会被执行。可调用lasterr函数查询出错原因。如果函数lasterr的运行结果为一个空串,则表明组命令1被成功执行了。当执行组命令2时又出错,Matlab将终止该结构。例5try-catch结构应用实例:对魔方阵的行进行援引,当“行下标”超出魔方阵的最大行数时,将改向对最后一行的援引,并显示“出错”警告。clear,N=4;A=magic(3);%设置3行3列魔方阵AtryA_N=A(N,:)%取A的第N行元素catchA_end=A(end,:)%如果取A(N,:)出错,则改取A的最后一行endlasterr

%显示出错原因A_end=492ans=Indexexceedsmatrixdimensions.

6、控制流的其他常用指令1)return指令通常,当被调函数执行完后,Matlab会自动地把控制转至主调函数或者指令窗。如果在被调函数中插入了return指令,可以强制Matlab结束执行该函数并把控制转出。2)input和keyboard指令(1)inputinput指令将Matlab的“控制权”暂时交给用户。此后,用户通过键盘键入数值、字符串或者表达式,并经“回车”把键入内容输入工作空间,同时把“控制权”交还给Matlab。常用的格式如下:v=input(’message’)将用户键入的内容赋给变量vv=input(’message’,’s’)将用户键入的内容作为字符串赋给变量v指令中’message’是将要显示在屏幕上的字符串,这是必不可少的。对于第一种调用格式,用户可以输入数值、字符串、元胞数组等各种形式的数据。对于第二种调用格式,不管键入什么,总以字符串形式赋给变量v(2)keyboard当程序遇到keyboard时,Matlab将“控制权”交给键盘,用户可以从键盘输入各种合法的Matlab指令,只有当用户使用return指令结束输入后,“控制权”才交还给程序。它与input的不同在于:它允许输入任意多个Matlab指令,而input只能输入赋给变量的“值”,即数值、字符串或元胞数组等。3)yesinput指令yesinput指令是一个智能输入指令,它提供了一个缺省输入值,并可以对输入范围进行检查。其调用形式如下:v=yesinput(’Prompt’,Default,Possib)该指令涉及用户和Matlab的交互操作,因此无法在notebook中运行。’Prompt’为文字提示,Default为缺省设置“值”,possib为可选“值”的范围。4)pause指令pause暂停执行文件,等待用户按任意键继续pause(n)在继续执行之前,暂停n秒5)break指令break指令导致包含有该指令的while、for指令的终止。通过使用break指令,可不比等待循环的自然结束,而根据循环内部另设的某种条件是否满足,去决定是否退出循环。6)error和warning指令在编写M文件时,常用的警示指令有:error(’message’)显示出错信息message,

温馨提示

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

评论

0/150

提交评论