第4章 MATLAB程序的流程控制_第1页
第4章 MATLAB程序的流程控制_第2页
第4章 MATLAB程序的流程控制_第3页
第4章 MATLAB程序的流程控制_第4页
第4章 MATLAB程序的流程控制_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

复习:Matlab编程,Matlab编程简介,Matlab作为一种广泛应用于科学计算的工具软件,不仅具有强大的数值计算、符号计算、矩阵运算能力和丰富的绘图功能,同时也具有和C、FORTRAN等高级语言一样进行程序设计。,在Matlab程序设计中,要充分利用Matlab数据结构的特点,提高编程效率。,利用Matlab的程序控制功能,可以将有关Matlab命令编成程序存储在一个文件中(M文件),然后在命令窗口中运行该文件,Matlab就会自动依次执行文件中的命令,直到全部命令执行完毕。,用Matlab语言编写的程序称为M文件。,M文件是由若干Matlab命令组合在一起构成的,它可以完成某些操作,也可以实现某种算法。事实上,Matlab提供的内部函数以及各种工具箱,都是利用Matlab语言开发的M文件。用户也可以结合自己的工作需要,开发自己的程序或工具箱。,M文件,M文件以.m为扩展名。,M文件是一个文本文件,可以用任何文本编辑器来建立和编辑,通常使用Matlab自带的M文件编辑器。,M文件的建立与打开,在命令窗口中输入f2cs,即可执行该M文件。,例:编写一个命令文件将华氏温度转化为摄氏温度,命令文件举例,命令文件运行后,文件中所产生的所有变量都驻留在Matlab当前工作空间,可以用whos查看。,function输出形参列表=函数名(输入形参列表)%注释说明部分(可选)函数体语句(必须),第一行为引导行,表示该M文件是函数文件函数名的命名规则与变量名相同(必须以字母开头)当输出形参多于一个时,用方括号括起来函数必须是一个单独的M文件函数文件名必须与函数名一致以百分号开始的语句为注释语句,函数文件,函数文件由function语句引导,例1编写函数文件求半径为r的圆的面积和周长。函数文件如下:functions,p=fcircle(r)%calculatetheareaandperimeterofacircleofradiir%r,s,p分别为圆的半径、面积以及周长s=pi*r*r;p=2*pi*r;,函数调用的一般格式,输出实参列表=函数名(输入实参列表),函数调用时,实参的顺序应与函数定义时的形参的顺序一致。函数可以嵌套调用,即一个函数可以被其它函数调用,甚至可以被它自身调用,此时称为递归调用。函数所传递的参数具有可调性,Matlab用两个永久变量nargin和nargout分别记录调用该函数时的输入实参和输出实参的个数。,函数调用,程序控制结构有三种:顺序结构、选择结构和循环结构。任何复杂的程序都由这三种基本结构组成.,顺序结构,M文件程序的流程控制,数据的输入:input,数据输入input,disp(X),输出变量X的值,可以是数值矩阵或字符串,B=123;456;789;disp(B),数据输出disp,数据的输出:disp,例求一元二次方程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);,数据输出fprintf,format中还可以使用一些特殊格式,如:,n(换行)t(制表符)b(退格)(反斜杆)%(百分号),数据输出fprintf,a=Hello;b=2.4;c=100*pi;fprintf(a=%s,b=%f,c=%en,a,b,c),例:,format中的输出格式要与输出变量一一对应,可以没有输出变量,选择结构是根据给定的条件成立或不成立,分别执行不同的语句。Matlab用于实现选择结构的语句有if语句和switch语句。,选择结构,单分支结构,ifexpression(条件)statements(语句组)end,if条件语句,ifexpression1(条件1)statements1(语句组1)elseifexpression2(条件2)statements2(语句组2).elseifexpressionm(条件m)statementsm(语句组m)elsestatements(语句组)end,多分支结构,if条件语句,例:编写函数,计算,functiony=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(语句组)end,switch语句,Matlab首先计算expression的值,然后将它依次与各个case指令后的检测值进行比较,当比较结果为真时,就执行相应的语句组,然后跳出switch结构。,switch后面的表达式expression的值可以是一个标量或字符串。,switch语句,otherwise指令可以不出现。,如果所有的比较结果都为假,则执行otherwise后面的语句组,然后跳出switch结构。,例某商场对顾客所购买的商品实行打折销售,标准如下(商品价格用price来表示):price200没有折扣200price5003%折扣500price10005%折扣1000price25008%折扣2500price10000为止.fnum(1)=1;fnum(2)=1;i=2;whilefnum(i)0)summean=sum/cntend,break和continue,break语句用于终止循环的执行,即跳出最内层循环continue语句用于结束本次循环,进行下一次循环break和continue一般与if语句配合使用,其它流控制语句,程序如下:forn=100:200ifrem(n,21)=0continueendbreak;End;n,%n/21的余数不等于0则继续下一次循环,即for循环:n继续加1,直到余数等于零,跳出continue循环体,例求100,200之间第一个能被21整除的整数。,n=105,%函数文件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=%gn,s),例:利用函数的递归调用计算n!,递归函数举例,函数所传递的参数具有可调性,Matlab用两个永久变量nargin和nargout分别记录调用该函数时的输入实参和输出实参的个数。,参数的可调性举例,functionout=ex4argin(a,b)if(nargin=1)out=a;elseif(nargin=2)out=a*b;end,functionp,q=ex4argout(a,b)if(nargout=1)p=a+b;elseif(nargout=2)p=a+b;q=a-b;end,函数通过输入和输出参数与其它M文件进行数据传递。,当函数调用完毕后,该函数文件中定义的所有局部变量都将被释放,即全部被清除。,如果在若干个M文件中,都把某个变量定义为全局变量,则这些函数将公共使用这一变量。所有函数都可以对它进行存取和修改操作。,函数文件中的变量都是局部的,即一个函数文件中定义的变量不能被另一个函数文件或其它M文件使用。,全局变量与局部变量,定义全局变量是M文件间传递信息的一种手段。,变量名列表中的各个变量用空格隔开,不能用逗号!,全局变量给函数间的数据传递带来了方便,但却破坏了函数对变量的封装,降低了程序的可读性,因而在结构化程序设计中,全局变量是不受欢迎的。特别是当程序较大,子程序较多时,全局变量将个程序调试和维护带来不便,故不提倡使用全局变量。,global变量名列表,全局变量的定义,在使用全局变量的所有M文件中,都要对其所使用的全局变量进行定义。,程序示例,%ex4global.mclear;globalaba=1;b=3;y=mysquaresum(a,b);fprintf(a=%g,b=%gn,a,b);z=myproduct(a,b);fprintf(a=%g,b=%gn,a,b);,%mysquaresum.mfunctionsquare_sum=mysquaresum(x,y)square_sum=x2+y2;a=x+y;,%myproduct.mfunctionproduct=myproduct(x,y)globalaproduct=x*y;a=x+y;,子函数,函数文件中可以含有一个或多个子函数子函数由function语句引导主函数必须位于最前面,子函数出现的次序任意子函数只能被主函数和位于同一个函数文件中的其它子函数调用除了用global定义的全局变量外,子函数中的变量都是局部变量,子函数与主函数及其它子函数之间通过输入、输出参数进行数据传递,调用一个函数时,Matlab会首先检查该函数是否为一个子函数。,子函数,functionavg,med=mysubfun(x)%主函数n=length(x);avg=mean(x,n);med=median(x,n);functiona=mean(x,n)%子函数,计算平均值a=sum(x)/n;functionm=median(x,n)%子函数,计算中值x=sort(x);ifrem(n,2)=1m=x(n+1)/2);elsem=(x(n/2)+x(n/2+1)/2;end,编程练习

温馨提示

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

评论

0/150

提交评论