MATLAB中的决策:控制流_第1页
MATLAB中的决策:控制流_第2页
MATLAB中的决策:控制流_第3页
MATLAB中的决策:控制流_第4页
MATLAB中的决策:控制流_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

MATLAB中的决策:控 制 流 计算机编程语言和可编程计算器提供许多功能,它允许你根据决策结构控制命令执行流程。如果你以前已经使用过这些功能,对此就会很熟悉。相反,如果不熟悉控制流,本章材料初看起来或许复杂些。如果这样,就慢慢来。 控制流极其重要,因为它使过去的计算影响将来的运算。MATLAB提供三种决策或控制流结构。它们是:For循环,While循环和If-Else-End结构。由于这些结构经常包含大量的MATLAB命令,故经常出现在M文件中,而不是直接加在MATLAB提示符下。7.1 For 循环 For循环允许一组命令以固定的和预定的次数重复。For循环的一般形式是:for x = arraycommandsend在for和end语句之间的commands按数组中的每一列执行一次。在每一次迭代中,x被指定为数组的下一列,即在第n次循环中,x=array(:, n)。例如, for n=1:10 x(n)=sin(n*pi/10); end xx = Columns 1 through 7 0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 Columns 8 through 10 0.5878 0.3090 0.0000 换句话,第一语句是说:对n等于1到10,求所有语句的值,直至下一个end语句。第一次通过For循环n=1,第二次,n=2,如此继续,直至n=10。在n=10以后,For循环结束,然后求end语句后面的任何命令值,在这种情况下显示所计算的x的元素。 For循环的其它重要方面是: 1. For循环不能用For循环内重新赋值循环变量n来终止。 for n=1:10 x(n)=sin(n*pi/10); n=10; end xx = Columns 1 through 7 0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 Columns 8 through 10 0.5878 0.3090 0.0000 2. 语句1 :10 是一个标准的MATLAB数组创建语句。在For循环内接受任何有效的MATLAB数组。 data=3 9 45 6; 7 16 -1 5data = 3 9 45 6 7 16 -1 5for n=data x=n(1)-n(2) endx = -4x = -7x = 46x = 1 3. For循环可按需要嵌套。for n=1:5 for m=5:-1:1 A(n,m)=n2+m2; end disp(n) end 1 2 3 4 5 AA = 2 5 10 17 26 5 8 13 20 29 10 13 18 25 34 17 20 25 32 41 26 29 34 41 50 4. 当有一个等效的数组方法来解给定的问题时,应避免用For循环。例如,上面的第一个例子可被重写为 n=1:10; x=sin(n*pi/10)x = Columns 1 through 7 0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 Columns 8 through 10 0.5878 0.3090 0.0000两种方法得出同样的结果,而后者执行更快,更直观,要求较少的输入。 5. 为了得到最大的速度,在For循环(While循环)被执行之前,应预先分配数组。例如,前面所考虑的第一种情况,在For循环内每执行一次命令,变量x的大小增加1。迫使MATLAB每通过一次循环要花费时间对x分配更多的内存。为了消去这个步骤,For循环的例子应重写为x=zeros(1,10); % preallocated memory for x for n=1:10 x(n)=sin(n*pi/10); end现在,只有x(n)的值需要改变。7.2 While 循环 与For循环以固定次数求一组命令的值相反,While 循环以不定的次数求一组语句的值。While循环的一般形式是: while expression commands end只要在表达式里的所有元素为真,就执行while和end 语句之间的commands。通常,表达式的求值给出一个标量值,但数组值也同样有效。在数组情况下,所得到数组的所有元素必须都为真。考虑下列例子: num=0;EPS=1; while (1+EPS)1 EPS=EPS/2; num=num+1; end numnum = 53 EPS=2*EPSEPS = 2.2204e-016 这个例子表明了计算特殊MATLAB值eps的一种方法,它是一个可加到1,而使结果以有限精度大于1的最小数值。这里我们用大写EPS,因此MATLAB的eps的值不会被覆盖掉。在这个例子里,EPS以1开始。只要(1+EPS)1为真(非零),就一直求While循环内的命令值。由于EPS不断地被2除,EPS逐渐变小以致于EPS+1不大于1。(记住,发生这种情况是因为计算机使用固定数的数值来表示数。MATLAB用16位,因此,我们只能期望EPS接近10-16。) 在这一点上,(1+EPS)1是假(零),于是While循环结束。最后,EPS与2相乘,因为最后除2使EPS太小。7.3 IF-ELSE-END 结构 很多情况下,命令的序列必须根据关系的检验有条件地执行。在编程语言里,这种逻辑由某种If-Else-End结构来提供。最简单的If-Else-End结构是: if expression commands end 如果在表达式中的所有元素为真(非零),那么就执行if和end语言之间的commands。在表达式包含有几个逻辑子表达式时,即使前一个子表达式决定了表达式的最后逻辑状态,仍要计算所有的子表达式。例如, apples=10; % number of apples cost=apples*25 % cost of applescost = 250 if apples5 % give 20% discount for larger purchases cost=(1-20/100)*cost; end costcost = 200 假如有两个选择,If-Else-End结构是: if expression commands evaluated if True else commands evaluated if False end在这里,如果表达式为真,则执行第一组命令;如果表达式是假,则执行第二组命令。 当有三个或更多的选择时,If-Else-End结构采用形式 if expression1 commands evaluated if expression1 is True elseif expression2 commands evaluated if expression2 is True elseif expression3 commands evaluated if expression3 is True elseif expression4 commands evaluated if expression4 is True elseif else commands evaluated if no other expression is True end 最后的这种形式,只和所碰到的、与第一个真值表达式相关的命令被执行;接下来的关系表达式不检验,跳过其余的If-Else-End结构。而且,最后的else命令可有可无。 现在我们知道了如何用If-Else-End结构来决策,就有可能提出一种合理的方法来跳出或中断For循环和While循环。 EPS=1; for num=1:1000 EPS=EPS/2; if (1+EPS)0) % test for strict first f=2;elseif all(y=0) f=1;elseif all

温馨提示

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

评论

0/150

提交评论