您好,欢迎访问三七文档
第4章程序流程控制4.1概述程序表达式的运算顺序有4种结构控制命令:while、if、for和switch。每当这些命令出现时,在程序中的稍后部分都必须要跟一个end语句。只有当所有条件满足时,控制结构命令与end命令之间的语句才会被执行。每一种控制结构命令可以随意相互之间嵌套或自身嵌套,称为嵌套结构。控制结构通常把关系运算或逻辑运算的结果作为判定条件。当条件满足时,控制语句将程序转向特定部分执行相应的语句。MATLAB的部分关系运算符和逻辑运算符如下表:部分关系运算符及逻辑运算符条件数学符号MATLAB符号关系运算符等于===不等于≠~=小于大于小于等于≤=大于等于≥=逻辑运算符与AND&或OR|非NOT~4.2程序流程控制4.2.1while循环while循环无限次执行一条或多条语句,当条件满足时停止循环,其语法为:while条件语句end其中,定义“条件”的表达式中可包含由“语句”计算得出的一个或多个变量。例1:正确输入数据编一程序,要求用户连续输入1到8之间的数,若所输入的数值超出范围,则程序终止。MATLAB程序如下:nfnum=0;while(nfnum1)|(nfnum8)nfnum=input('Enteranumberfrom1to8:');end例2:级数收敛性判定计算并显示级数Sn的项数N,Sn如下:NnnnS121当收敛到终值6/2S的0.01%以内时,项数N为多少。MATLAB程序如下:eries=1;k=2;exact=pi^2/6;whileabs((series-exact)/exact)=1e-4series=series+1/k^2;k=k+1;enddisp(['#terms=',num2str(k-1)])4.2.2if语句if语句的常见形式如下:if条件#1表达式#1elseif条件#2表达式#2else表达式#3end例4.3疲劳强度计算根据给定的校正系数计算金属的疲劳强度。因素范围校正系数受力方式弯曲Cload=1轴向Cload=0.70尺寸d≤8mmCsize=18≤d≤250mmCsize=1.189d-0.097温度T450OCCtemp=1450≤TOCCtemp=1-0.0032(T-840)判断这些因素的程序如下:iflode=='bending'cload=1;elsecload=0.7;endifd=8csize=1;elsecsize=1.189*d^(-0.097);endiftemp=450ctemp=1;elsectemp=1-0.0032*(T-840);end4.2.3for循环for循环可按指定次数重复执行一系列语句,其常见结构为:for变量=表达式循环语句end例4:计算借款利息已知借款总额为L,借期m个月,年利率百分数为Ia求借款总利息。月还款额Pmon由下式得出:mmoniiLP)1(1其中,1200/aIi是以十进制表示的月利率。每月偿还部分借款,偿还得钱中一部分用于支付利息,余下部分算做偿还借款。每月还款后的余额称做收付差额。这些关系用数学表达式如下。设bO=L,则:nnnnmonnnnPbbmniPPibi11,3,2,1其中in是每月偿还利息Pmon的一部分,Pn是每月偿还的本金,Pn是每月偿还的本金,bn是未偿还的本金。则总利息为:mjjTii1计算的总利息iT的程序为:loan=input('Enterloanamount:');durat=input('Entertermofloaninmonths:');int=input('Enterannualinterestrate:')/1200;ints=zeros(durat,1);prins=ints;bals=ints;pomn=(loan*int)/(1-(1+int)^(-durat));bals(1)=loan;form=2:durat+1ints(m)=int*bals(m-1);prins(m)=pomn-ints(m);bals(m)=bals(m-1)-prins(m);end程序执行结果为:Enterloanamount:100000entertemofloaninmonths:300Enterannualinterestrate:8Totalinterest=$164155.25例5:find函数的实现给定由正数和负数构成的任意长度向量g,用程序实现下式:nidex=find(gn)这里a是由用户指定的一个值。本例中a=4,向量g=[4,4,7,10,-6,42,1,0]。程序如下:learg=[44710-64210];a=4;k=0;indx=[]%给indx赋空forn=1:length(g)ifg(n)aindx=[indxn];endenddisp(['Elementloacationsforg(n)',num2str(a),':',num2str(indx)])执行上述程序后,MATLAB命令窗口显示:Elementlocationsforg(n)4:346例4.6cumsum函数的实现给定任意长度的向量c,用程序实现:Csum=cumsum(c)用向量c=[44710-64210]来检验该程序。程序如下:clearc=[44710-64210];Csum(1)=c(1);fork=2:length(c)Csum=[CsumCsum(k-1)+c(k)];%或Csum(k)=Csum(k-1)+c(k);enddisp(['Cumsumofc=',num2str(Csum)])执行上述程序后,MATLAB命令窗口显示:Comsumofc=481519616262例7:diag函数的实现给定b)(阶矩阵nn,程序第一步实现:)(bdiagv第二步实现:)(vdiagd这里v是第一步得到的结果。用矩阵)4(magicb检验程序,并假设不使用冒号和zeros函数。程序如下:b=magic(4);[r,c]=size(b);fork=1:rv(k)=b(k,k);enddisp(['Diagonalelementsofb='])disp(num2str(v))forn=1:rform=1:rifn==md(n,m)=v(n);endendenddisp(['Diagonalmatrixd='])disp(num2str(d))4.2.4for循环或while循环的提前终止break函数可实现for循环或while循环的提前终止。若break函数嵌套于for循环或while循环的内部,则返回到上一级的for循环或while循环。考虑下列程序段:forj=1:14…b=1whileb25…ifn0breakend…end…end4.2.5switch语句通常,switch的语法结构为:switchswitch_expressioncasecase_expression#1statements#1casecase_expression#2statements#2…casecase_expression#nstatements#notherwisestatements#n+1end例8:作曲面的4个视图在图形窗口的4个独立区域分别绘制曲面z(x,y)的4个视图。其中subplot函数将窗口划分为网格,这里划分为)22(网格。变量k用来指定图像位于哪个区域内;k=1,左上角;k=2,右上角;k=3,右下角;k=4,左下角。subplot函数为把几个独立生成的图形放在同一图形窗口中。surf函数用于绘制以x和y为变量的函数z的三维视图。view函数用于设定角度,变量x,y和z已被赋值或已计算得出其值。fork=1:4subplot(2,2,k)surf(x,y,z)switchkcase1view(-37.5,30)case2view(-70,30)case3view(-37.5,50)case4view(-70,50)end4.3程序控制结构的两项应用4.3.1产生2K的正交表例10:产生2K的正交表k=input('Enternumberoffactors(=2,3,or4)');s=ones(2^k,2^k-1);forr=1:2:2^ks(r,1)=-1;endforc=2:ke=2^(c-1);forr=1:es(r,e)=-1;endforr=e+1:2^ks(r,2^(c-2))=s(r-e,2^(c-2));endendform=2:ke=2^(m-1);forj=1:e-1s(:,e+j)=s(:,j).*s(:,e);endenddisp(s)4.3.2用二分法求多个根例11:采用二分法求满足下式的前5个根:0)cos()(axxf这里取a=。程序如下:n=5;a=pi;increment=0.3;tolerance=1e-6;xstart=0.2;x=xstart;dx=increment;form=1:ns1=sign(cos(a*x));whiledx/xtoleranceifs1~=sign(cos(a*(x+dx)))dx=dx/2;elsex=x+dx;endendroute(m)=x;dx=increment;x=1.05*x;enddisp(route)练习4.1编写程序完成逻辑运算,即给定任意长度的向量h,判定其元素值大于a和小于b时的结果是否为1,并将结果用向量v表示出来。设h=[1,3,6,-7,-45,12,17,9],a=3,b=13,检验所设计的程序。[答案:v=[0,0,1,0,0,1,0,1]。]4.2估计由下式描述的n个采样值xj的方差:njjnnnjjnxnxnxnxns121221111这是平均值。方差由var决定。编写计算n1,x=[45,38,47,41,35,43]时样本方差2ns的程序。[答案:[24.5000,22.3333,16.2500,24.2000,19.9000].]4.3给定a0,假设任意初值xO0,下面的关系式将限定数√a在容限tO以内:,2,1,0211nxaxxnnn其中xn+1≈√a(当xO0时,有负方根)。编写程序,当a7时,在|xn-xn+1|10-6条件下确定√a在(a)xO=3和(b)xO=100时,计算将重复多少次。第一次重复是确定x1。[提示:上述关系式不是n的显式函数。这里下标n标明下一值xn+1是当前值xn的函数。因此,每次循环后新旧值都被保存,n纪录循环次数。]4.4考虑下式:Nnxxnn,,2,1,025.021对xO=0,编写两段程序求n=0,5,10,…,200时xn的值。第一段程序采用for循环结构;第二段程序采用while循环结构。xn收敛为何值?plot函数的第三个参数设为plot(…,…,’ks’),画出xn的平方曲线图。x轴代表n,y轴为xn。注意,对n=0,1,2,…,200的所有xn值都要计算出来,但画图时只需每隔5点画出即可。另外,与练习4.3不同的是,xn必须以向量形式保存,以便随时显示其特定元素。
本文标题:第4章程序流程控制
链接地址:https://www.777doc.com/doc-2195092 .html