您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 第4章_MATLAB程序的流程控制
复习:Matlab编程Matlab编程简介Matlab作为一种广泛应用于科学计算的工具软件,不仅具有强大的数值计算、符号计算、矩阵运算能力和丰富的绘图功能,同时也具有和C、FORTRAN等高级语言一样进行程序设计。在Matlab程序设计中,要充分利用Matlab数据结构的特点,提高编程效率。利用Matlab的程序控制功能,可以将有关Matlab命令编成程序存储在一个文件中(M文件),然后在命令窗口中运行该文件,Matlab就会自动依次执行文件中的命令,直到全部命令执行完毕。用Matlab语言编写的程序称为M文件。M文件是由若干Matlab命令组合在一起构成的,它可以完成某些操作,也可以实现某种算法。事实上,Matlab提供的内部函数以及各种工具箱,都是利用Matlab语言开发的M文件。用户也可以结合自己的工作需要,开发自己的程序或工具箱。M文件根据调用方式的不同可以分为两类:Script:脚本文件/命令文件Function:函数文件M文件M文件以.m为扩展名。M文件是一个文本文件,可以用任何文本编辑器来建立和编辑,通常使用Matlab自带的M文件编辑器。M文件的建立与打开新建一个M文件菜单操作(FileNewM-File)命令操作(editM文件名)命令按钮(快捷键)打开已有的M文件菜单操作(FileOpen)命令操作(editM文件名)命令按钮(快捷键)双击M文件在命令窗口中输入f2cs,即可执行该M文件。5(32)9cf例:编写一个命令文件将华氏温度转化为摄氏温度命令文件举例clear;%清除当前工作空间中的变量f=input('PleaseinputFahrenheittemperature:');c=5*(f-32)/9;fprintf('Thecentigradetemperatureis%g\n',c);新建一个M文件f2cs.m,内容如下:命令文件运行后,文件中所产生的所有变量都驻留在Matlab当前工作空间,可以用whos查看。function输出形参列表=函数名(输入形参列表)%注释说明部分(可选)函数体语句(必须)第一行为引导行,表示该M文件是函数文件函数名的命名规则与变量名相同(必须以字母开头)当输出形参多于一个时,用方括号括起来函数必须是一个单独的M文件函数文件名必须与函数名一致以百分号开始的语句为注释语句函数文件函数文件由function语句引导例1编写函数文件求半径为r的圆的面积和周长。函数文件如下:function[s,p]=fcircle(r)%calculatetheareaandperimeterofacircleofradiir%r,s,p分别为圆的半径、面积以及周长s=pi*r*r;p=2*pi*r;函数调用的一般格式输出实参列表=函数名(输入实参列表)函数调用时,实参的顺序应与函数定义时的形参的顺序一致。函数可以嵌套调用,即一个函数可以被其它函数调用,甚至可以被它自身调用,此时称为递归调用。函数所传递的参数具有可调性,Matlab用两个永久变量nargin和nargout分别记录调用该函数时的输入实参和输出实参的个数。函数调用程序控制结构有三种:顺序结构、选择结构和循环结构。任何复杂的程序都由这三种基本结构组成.顺序结构M文件程序的流程控制按排列顺序依次执行各条语句,直到程序的最后。这是最简单的一种程序结构,一般涉及数据的输入输出、数据的计算或处理等。例:A=input('PleaseinputA:')数据的输入:inputA=input(提示信息)其中提示信息为字符串,该命令要求用户输入A的值(可以是数或字符串)数据输入inputA=input(提示信息,'s')注:此时输入的字符串不要加单引号!如果是输入字符串,也可以使用下面的方法name=input('What''syourname?','s')例:disp(X)输出变量X的值,可以是数值矩阵或字符串B=[123;456;789];disp(B)数据输出disp数据的输出:dispA='Hello,Tom!';disp(A)例:例求一元二次方程ax2+bx+c=0的根。程序如下:functionx=myfun3(a,b,c)a=input(‘请输入系数a:');b=input('请输入系数b:');c=input('请输入系数c:');d=b*b-4*a*c;x=[(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)];disp(['x1=',num2str(x(1)),',x2=',num2str(x(2))]);数据输出fprintffprintf(fid,format,variables)按指定的格式将变量的值输出到指定的文件数据的输出:fprintffid为文件句柄,若缺省,则将变量的值输出到屏幕上format用来指定数据输出时采用的格式,常见的有%d(整数)%e(实数:采用科学计数法形式)%f(实数:采用浮点数形式)%g(由系统自动选取上述两种格式之一)%s(输出字符串)format中还可以使用一些特殊格式,如:\n(换行)\t(制表符)\b(退格)\\(反斜杆)%%(百分号)数据输出fprintfa='Hello';b=2.4;c=100*pi;fprintf('a=%s,b=%f,c=%e\n',a,b,c)例:format中的输出格式要与输出变量一一对应可以没有输出变量fprintf('TodayisMonday\n')例:选择结构是根据给定的条件成立或不成立,分别执行不同的语句。Matlab用于实现选择结构的语句有if语句和switch语句。选择结构单分支结构ifexpression(条件)statements(语句组)endif条件语句ifexpression(条件)statements1(语句组1)elsestatements2(语句组2)end双分支结构ifexpression1(条件1)statements1(语句组1)elseifexpression2(条件2)statements2(语句组2)......elseifexpressionm(条件m)statementsm(语句组m)elsestatements(语句组)end多分支结构if条件语句例:编写函数,计算.1,11,1,23,1,)(2xxxxxxffunctiony=myfun4(x)n=length(x);fori=1:nifx(i)1y(i)=x(i)^2;elseifx(i)-1y(i)=1;elsey(i)=3+2*x(i);endend根据表达式的不同取值,分别执行不同的语句。switchexpression(表达式)casevalue1(表达式1)statement1(语句组1)casevalue2(表达式2)statement2(语句组2)......casevaluem(表达式m)statementm(语句组m)otherwisestatement(语句组)endswitch语句Matlab首先计算expression的值,然后将它依次与各个case指令后的检测值进行比较,当比较结果为真时,就执行相应的语句组,然后跳出switch结构。switch后面的表达式expression的值可以是一个标量或字符串。switch语句otherwise指令可以不出现。如果所有的比较结果都为假,则执行otherwise后面的语句组,然后跳出switch结构。例某商场对顾客所购买的商品实行打折销售,标准如下(商品价格用price来表示):price200没有折扣200≤price5003%折扣500≤price10005%折扣1000≤price25008%折扣2500≤price500010%折扣5000≤price14%折扣输入所售商品的价格,求其实际销售价格。price=input('请输入商品价格');switchfix(price/100)case{0,1}%价格小于200rate=0;case{2,3,4}%价格大于等于200但小于500rate=3/100;casenum2cell(5:9)%价格大于等于500但小于1000rate=5/100;casenum2cell(10:24)%价格大于等于1000但小于2500rate=8/100;casenum2cell(25:49)%价格大于等于2500但小于5000rate=10/100;otherwise%价格大于等于5000rate=14/100;endprice=price*(1-rate)%输出商品实际销售价格循环结构是按照给定的条件,重复执行指定的语句。Matlab用于实现循环结构的语句有for语句和while语句循环结构forvariable=expressionstatement(循环体)end循环变量表达式expression可以是行向量,也可以是矩阵for循环clear;y=0;n=100;fork=1:ny=y+1/(2*k-1);end例:已知,当n=100时,求y的值12151311ny例一个三位整数各位数字的立方和等于该数本身则称该数为水仙花数。输出全部水仙花数。程序如下:form=100:999m1=fix(m/100);%求m的百位数字m2=rem(fix(m/10),10);%求m的十位数字m3=rem(m,10);%求m的个位数字ifm==m1*m1*m1+m2*m2*m2+m3*m3*m3disp(m)endend循环语句可以嵌套使用while循环whileexpression(条件)statement(循环体)end如果预先就知道循环的次数,则可以采用for循环;否则,如果预先无法确定循环的次数,则可以使用while循环。while循环举例例生成斐波那契数列,直到a(i)10000为止.fnum(1)=1;fnum(2)=1;i=2;whilefnum(i)=10000fnum(i+1)=fnum(i-1)+fnum(i);i=i+1;end;fnum例从键盘输入若干个数,当输入0时结束输入,求这些数的平均值和它们之和.sum=0;cnt=0;val=input('Enteranumber(endin0):');while(val~=0)sum=sum+val;cnt=cnt+1;val=input('Enteranumber(endin0):');endif(cnt0)summean=sum/cntendbreak和continuebreak语句用于终止循环的执行,即跳出最内层循环continue语句用于结束本次循环,进行下一次循环break和continue一般与if语句配合使用其它流控制语句returnreturn语句用于退出正在运行的脚本或函数,通常用在函数文件中。程序如下:forn=100:200ifrem(n,21)~=0continueendbreak;End;n%n/21的余数不等于0则继续下一次循环,即for循环:n继续加1,直到余数等于零,跳出continue循环体例求[100,200]之间第一个能被21整除的整数。n=1051,1!(1)!,1nnnnn%函数文件myfun5.mfunctionf=myfun5(n)if(n=1)f=1;elsef=n*myfun5(n-1);end%main.m%计算s=1!+2!+3!+4!+5!%clear;s=0;fori=1:5s=s+myfactor(i);endfprintf('s=%g\n',s)例:利用函数的递归调用计算n!递归函数举例函数所传递的参数具有可调性,Matlab用两个永久变量nargin和nargout分别记录调用该函数时的输入实
本文标题:第4章_MATLAB程序的流程控制
链接地址:https://www.777doc.com/doc-3362564 .html