版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、matlab中的决策:控制流计算机编程语言和可编程计算器提供许多功能,它允许你根据决策结构控制命令执行 流程。如果你以前己经使用过这些功能,对此就会很熟悉。相反,如杲不熟悉控制流,木 章材料初看起來或许复杂些。如果这样,就慢慢來。控制流极其重要,因为它使过去的计算彩响将来的运算。matlab捉供三种决策或 控制流结构。它们是:for循环,while循环和if-else七nd结构。由丁这些结构经常包含大 量的matlab命令,故经常出现在m文件中,而不是ft接加在matlab提示符下。7. 1 for循环for循环允许一组命令以固定的和预定的次数重复。for循环的一般形式是:for x = ar
2、raycommandsend在foi和end语句之间的commands按数组中的每一列执行一次。在每一次迭代屮,x被 指定为数组的下一列,即在第n次循坏中,x=array(:, n)0例如,» for n=l:10x(n)=sin(n*pi/10);end» xx =columns 1 through 70.30900.58780.80900.95111.00000.95110.8090columns 8 through 100.58780.30900.0000换句话,第一语句是说:对n等于1到10,求所有语句的值,直至下一个end语句。 第一次通过foi循环n=l,第二次
3、,n=2,如此继续,直至n=10c在n=10以后,for循环 结束,然后求end语句后血的任何命令值,在这种情况下显示所计算的x的元素。for循环的其它重要方血是:1for循环不能用for循环内重新赋值循环变量n来终止。» for n=l:10x(n)=sin(n*pi/10);n=10;end» xx =columns 1 througli 70.30900.58780.80900.95111.00000.95110.8090columns 8 through 100.58780.30900.00002语句1 :10是一个标准的matlab数纽创建语句。在for循环内接受
4、任何有效的 matlab 数组。» data=39 456;16545-116for n=datax=n( 1 )-n(2) endx =-4x =-7x =46x =13for循环可按需要嵌套。for n=l:5for m=5:-l:la(n,m)=na2+ma2;end disp(n) end251()1726581320291013182534172025324126293441504. 当有一个等效的数组方法来解给定的问题时,应避免用foi循环。例如,上面的 第一个例子可被重写为» n=l:10;» x=sin(n*pi/10)x =columns 1 t
5、hrough 70.80900.95110.00001.00000.95110.80900.30900.5878columns 8 through 100.58780.3090两种方法得出同样的结果,而后者执行更快,更直观,要求较少的输入。5. 为了得到最大的速度,在foi循环(while循环)被执行之前,应预先分配数组。例 如,前1侨所考虑的第一种情况,在for循环内每执行一次命令,变量x的大小增加1。迫 使matlab每通过一次循环要花费时间对x分配更多的内存。为了消去这个步骤,for 循环的例子应重写为»x=zeros( 1,10);% preallocated memory
6、for x» forn=l:10x(n)=sin(n*pi/10);end现在,只有x(n)的值需耍改变。7.2 while 循环与for循环以固定次数求一组命令的值相反,while循环以不定的次数求一组语句的 值。while循环的一般形式是:while expressioncommandsend只要在表达式里的所有元素为真,就执行、vhile和end语句之间的commandso通常,表 达式的求值给出一个标量值,但数组值也同样有效。在数组情况下,所得到数组的所有元 素必须都为真。考虑下列例子:» num=0;eps=l;» while (1+eps)1eps=e
7、ps/2;num=num+l;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接近1016
8、1; )在这一点上,(1+eps)1是假(零),于是while循环结朿。最 后,eps与2相乘,因为最后除2使eps太小。7. 3 if-else-end 结构很多情况下,命令的序列必须根据关系的检验有条件地执行。在编程语言里,这种逻 辑由某种if-else七nd结构來捉供。最简单的if-else-end结构是:if expression commands)end如果在表达式中的所有元素为真(非零),那么就执行if和end语言之间的commandso在表达式包含有几个逻辑子表达式时,即使前一个子表达式决定了表达式的最后逻辑状态,仍要计算所有的子表达式。例如,» apples=10;%
9、number of apples» cost=apples*25%cost of applescost =250»if apples>5%give 20% discount for larger purchasescost=( 1-20/100)*cost;end» costcost =200假如有两个选择,ifelse-end结构是:if expressioncommands evaluated if tmeelsecommands evaluated if falseend在这里,如果表达式为真,则执行第-纽命令;如果表达式是假,则执行第二组命令。 当有
10、三个或更多的选择时,if-else-end结构采川形式if expression 1commands evaluated if expression 1 is trueclscif cxprcssion2commands evaluated if expression2 is trueelseif expression3commands evaluated if expression3 is trueelseif expression4commands evaluated if expression4 is trueelseif elsecommands evaluated if no oth
11、er expression is true最后的这种形式,只和所碰到的、与第一个真值表达式相关的命令被执行;接下来的 关系表达式不检验,跳过其余的if-else-end结构。而且,最后的else命令可有可无。现在我们知道了如何用if-else-end结构来决策,就有可能提出一-种合理的方法来跳出 或中断for循环和while循环。»eps=1;» for num= 1:1000eps二eps/2; if(l+eps)<=leps二eps*2 breakendendeps =2.2204e-016» numnum =53这个例子演示了估算eps的另一种方法。在
12、这种情况下,for循环构造成要执行足够 多的次数。if-else-end结构检验要看eps是否变得足够小。如果是,eps乘2, break命 令强迫for循环提早结束,num=53o在这个例子里,当执行break语句时,matlab跳到循环外下一个语句。在现在情 况下,它返回到matlab的提示符并显示epso如果一个break语句出现在一个嵌套的 for循环或while循环结构里,那么matlab只跳出break所在的那个循环,不跳出整个 嵌套结构。7.4小结matlab控制流功能可以概扌忑如下:表7for x = aitayfor循环,每_次迭代将x赋以数组的endwhile expres
13、sioncommandscommands第i歹lj,执行命令while循坏,只要表达式的所有元索 为真或非零,执行命令。if expressioncommandsend讦 expressioncommands evaluated if trueelse expressioncommands evaluated if falseend讦 expression 1 commands evaluated if expression 1 is true elseif expression!comma nds evaluated 讦 expression! is ttue if expressi on3
14、comma nds evaluated 讦 expression3 is ttue elseif 简单的if-else-end结构,若在表达式 中的所育元索是真值或非零,执行 命令。具有两条路径的if-else-end结构, 若表达式为真或非零,则执行一组 命令。若表达式为假或零, 则执行另一组命令。最一般的if-else-end结构。 只执行与第一个真值表达式相关 的命令。elsecommands evaluated if no other expression is trueendbreak结束for循环和while循环的执行7.5 m文件举例为了演示if-else-end结构,考虑精通m
15、atlab i具箱中换数mmono,它检查一个向量的单调性。» mmono(l:12)% strictly increasing inputans =2»mmono(l:12 1213:24)% non decreasing inputans =% not monotonic in any sense»mmono( 13 2 -11)ans =»mmono(12:-l:0 0-1)% non increasing» mmono(12:-l:0)% strictly decrasingans =-2这个精通matlab工具箱的函数主体给出如下:f
16、unction f=mmono(x)% mmono test for monotonic vector.% mmono(x) where x is a vector return:%2 if x is strictly increasing,%1 if x is non decreasing,% 1 if x is non increasing,%2 讦 x is strictly decreasing,%0 otherwise.% copyright (c) 1996 by prentice-halljnc.x=x(:);% make x a column vectory=diff(x);% find differences between consecutive elemen
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 预防接种科室工作制度
- 领导定期部署工作制度
- 高速路政管理工作制度
- 齿轮2班每日工作制度
- 2026届吉林省G35+联合体高三一模语文试题
- 桂林市全州县2025-2026学年第二学期三年级语文期末考试卷(部编版含答案)
- 十堰市茅箭区2025-2026学年第二学期三年级语文第七单元测试卷(部编版含答案)
- 洛阳市汝阳县2025-2026学年第二学期五年级语文第八单元测试卷(部编版含答案)
- 食醋制作工道德能力考核试卷含答案
- 啤酒花栽培工班组考核水平考核试卷含答案
- 2025福建省漳州市对外贸易有限责任公司招聘1人笔试历年备考题库附带答案详解
- 西南证券股份有限公司2026届春季校园招聘备考题库附答案详解(基础题)
- JJF1033-2023计量标准考核规范
- 病理学与病理生理学(第5版) 课件 丁运良 第七章 发热;第八章 炎症
- 专题37 八年级名著导读梳理(讲义)
- 神经科学研究进展
- 新课标语文整本书阅读教学课件:童年(六下)
- 【RCEP背景下中国对日本农产品出口贸易SWOT及发展对策10000字(论文)】
- CJ/T 124-2016 给水用钢骨架聚乙烯塑料复合管件
- 电影赏析绿皮书课件(内容详细)
- 信阳职业技术学院单招《职业技能测试》参考试题库(含答案)
评论
0/150
提交评论