第四章Matlab程序设计Matlab程序设计与应用Matlab程序设计与应用MatlabProgramming&It’sApplication第四章Matlab程序设计TONGXiao-zhong信息物理工程学院第四章Matlab程序设计Matlab程序设计与应用2021/11/214.1M文件4.2程序控制结构4.3函数文件4.4程序调试4.5程序设计优化本章内容:第四章Matlab程序设计Matlab程序设计与应用2021/11/224.1M文件如何开始编辑程序edit程序后缀为m第四章Matlab程序设计Matlab程序设计与应用2021/11/23两种m文件脚本Script和函数function.m文件脚本程序函数程序参数没有输入参数,也不返回参数可以接受参数,也可以返回参数数据处理的数据即为命令区的数据函数里面的变量为局部变量,但也可以设外部变量应用经常用于一连串费时的指令上扩充Matlab函数库,以及特殊应用上表:两种m文件的比较第四章Matlab程序设计Matlab程序设计与应用2021/11/24Matlab脚本程序的基本结构%prog1.m脚本程序范例,画出花瓣angle=-pi:0.01:pi;dp(1,:)=sin(10*angle).^2;polar(angle,dp(1,:));第四章Matlab程序设计Matlab程序设计与应用2021/11/25脚本程序可调用Matlab工作域内所有数据,且产生的变量均为全局变量以%引导的是注释行,不可执行运行此程序前,要将此m文件放在当前目录第四章Matlab程序设计Matlab程序设计与应用2021/11/26Matlab函数程序的基本结构%comp.m函数程序范例functiony=comp(x)%comp(x):comp(x)=(x+10)^2*x;z=x+10;y=z.^2*x;returny%函数结束并返回y第四章Matlab程序设计Matlab程序设计与应用2021/11/27函数程序定义的局部变量仅在内部有效文件名与函数名对应help命令可查看该m文件第一块连续的注释应在第一块连续注释中包含函数的特征信息第四章Matlab程序设计Matlab程序设计与应用2021/11/28函数设计中可以接受不同数目,类型参数functionout=arg_adjust(a,b,c)%本函数用以示例输入不同数目参数的设计if(nargin==1)out=a;elseif(nargin==2)out=(a.^2+b.^2);elseif(nargin==3)out=(a*b*c)/2;end第四章Matlab程序设计Matlab程序设计与应用2021/11/29参数与变量局部变量与全局变量变量名称开头必须是一个英文字母,后可接字母、数字和下划线变量名区分大小写变量默认为局部变量,global申明全局变量第四章Matlab程序设计Matlab程序设计与应用2021/11/2104.2流程控制Matlab提供四种基本流程控制表:四种基本流程控制功能关键字功能if,else,elseif根据逻辑条件执行一系列运算switch,case,otherwise根据条件值选择执行项目while根据逻辑条件决定循环次数for执行固定次数的循环第四章Matlab程序设计Matlab程序设计与应用2021/11/211选择语句if判断表达式执行语句endif判断表达式执行语句else执行语句endif判断表达式一执行语句块一elseif判断表达式二执行语句块二elseif判断表达式三执行语句块三else执行语句块四end第四章Matlab程序设计Matlab程序设计与应用2021/11/212If语句if语句称为条件执行语句。其关键字包括if、else、elseif和end。格式之一:if表达式语句组Aend其工作流程如图所示。注意:语句中的end是决不可少的,没有它,在逻辑表达式为0时,就找不到继续执行程序的入口。第四章Matlab程序设计Matlab程序设计与应用2021/11/213格式之二:if表达式语句组Aelse语句组Bend其工作流程如图所示。第四章Matlab程序设计Matlab程序设计与应用2021/11/214格式之三:if表达式1语句组Aelseif表达式2语句组Belse语句组Cend工作流程原理如图所示。第四章Matlab程序设计Matlab程序设计与应用2021/11/215选择语句else部分可以是复合语句或其他控制语句if语句嵌套时,if和else必须对应else子句中嵌套if时,形成elseif结构,可实现多路选择结构第四章Matlab程序设计Matlab程序设计与应用2021/11/216分支语句switch分支条件(数值或字符串)case数值(或字符串)条件一执行语句一case数值(或字符串)条件二执行语句二otherwise执行语句Nend第四章Matlab程序设计Matlab程序设计与应用2021/11/217分支语句R=input(‘Whoareyou?’)switchRcase‘Mike’display(‘Haveaniceday,Mike!’)case‘Rose’display(‘Youlookgood,Rose.’)case‘Jerry’display(‘Longtimenosee,Jerry’)otherwisedisplay(‘Nicetomeetyou.’)end第四章Matlab程序设计Matlab程序设计与应用2021/11/218分支语句Matlab的switch无C语言的breakMatlab只执行第一个检验成功的caseC语言检验全部case第四章Matlab程序设计Matlab程序设计与应用2021/11/219循环语句for循环(对循环次数的判断)例:fori=1:5forj=1:6a(i,j)=1/(i+j-1);endendfor计数器=初始值:增量:终止值指令end第四章Matlab程序设计Matlab程序设计与应用2021/11/220循环语句for循环一定以end结束,中间的都认为是循环内容避免用i,j作循环变量名,它们是虚数单位循环语句中的分号;可屏蔽中间结果输出循环语句锯齿形对齐,易读for循环效率不如向量运算的高第四章Matlab程序设计Matlab程序设计与应用2021/11/221循环语句练习:使用for循环语句实现计算n!functionresult=factorial(n)%using‘for’loopif(n=0)returnelseresult=1;fori=1:1:nresult=result*i;endend第四章Matlab程序设计Matlab程序设计与应用2021/11/222循环语句例已知求y的表达式,当n=100时,求y的值。程序如下:y=0;n=100;fori=1:ny=y+1/i/i;endy为提高程序的执行速度,常用向量运算来代替循环操作:n=100;i=1:n;f=1./i.^2;y=sum(f)效率更高第四章Matlab程序设计Matlab程序设计与应用2021/11/223循环语句while循环(对逻辑条件判断)例:n=1;m=9;a=0;whilenma=a+n*m;n=n+1;m=m-2;end运算指令while循环条件指令end第四章Matlab程序设计Matlab程序设计与应用2021/11/224while语句为条件循环语句,循环执行一组语句,执行次数不确定,而是决定于一些逻辑条件。其关键字包括while、end、break等。基本调用格式:while表达式语句Aend判断表达式是否满足?满足(Y)不满足(N)条件执行结束语句组Awhileend第四章Matlab程序设计Matlab程序设计与应用2021/11/225循环语句练习:使用while循环语句实现计算n!functionresult=factorial(n)%using‘while’loopif(n=0)result=1;elseresult=1;i=1;whileini=i+1;result=result*i;endend第四章Matlab程序设计Matlab程序设计与应用2021/11/2264.3函数文件函数文件的基本结构函数文件由function语句引导,其基本结构为:function输出形参表=函数名(输入形参表)注释说明部分函数体语句其中以function开头的一行为引导行,表示该M文件是一个函数文件。函数名的命名规则与变量名相同。输入形参为函数的输入参数,输出形参为函数的输出参数。当输出形参多于一个时,则应该用方括号括起来。第四章Matlab程序设计Matlab程序设计与应用2021/11/227函数调用函数调用的一般格式是:[输出实参表]=函数名(输入实参表)要注意的是,函数调用时各实参出现的顺序、个数,应与函数定义时形参的顺序、个数一致,否则会出错。函数调用时,先将实参传递给相应的形参,从而实现参数传递,然后再执行函数的功能。在MATLAB中,函数可以嵌套调用,即一个函数可以调用别的函数,甚至调用它自身。一个函数调用它自身称为函数的递归调用。第四章Matlab程序设计Matlab程序设计与应用2021/11/228例:利用函数的递归调用,求n!。n!本身就是以递归的形式定义的:显然,求n!需要求(n-1)!,这时可采用递归调用。递归调用函数文件factor.m如下:functionf=factor(n)ifn=1f=1;elsef=factor(n-1)*n;%递归调用求(n-1)!end第四章Matlab程序设计Matlab程序设计与应用2021/11/2294.4程序调试语法错误函数参数类型矩阵阶数错误命令字母循环命令不匹配标点符号;,()[]等第四章Matlab程序设计Matlab程序设计与应用2021/11/230常见错误一:程序文件名错m_file_name(回车)???Undefinedfunctionorvariable‘m_file_name'.可能出错原因:1.程序文件名错2.大小写错3.m文件不在搜索路径中改正对策:1.核对文件名2.检查大小写,统一命名风格3.拷贝到或包含路径第四章Matlab程序设计Matlab程序设计与应用2021/11/231常见错误二:操作符错string1operatorstring2(回车)???string1operator|missingoperator,comma,orsemi-colon.可能出错原因:1.错用或漏用操作符,不恰当的逗号、分号等2.运行程序文件,但加了后缀.m,Matlab认为是变量运算改正对策:1.检查操作符2.去掉文件名后缀第四章Matlab程序设计Matlab程序设计与应用2021/11/232例:矩阵阶数不符的情况A=[1,2;3,4];B=[1,2,3;4,5,6;7,8,9];A*B???Errorusing==*Innermatrixdimensionmustagree.第四章Matlab程序设计Matlab程序设计与应用2021/11/233其他常用调试方法将每步执行结果输出到命令窗口,检查中间结果去除屏蔽输出的;号注意变量的值的变化第四章Matlab程序设计Matlab程序设计与应用2021/11/234其他常用调试方法逐部分注释可疑代码如何快速注释大段代码?第四章Matlab程序设计Matlab程序设计与应用2021/11/235尽量使用Matlab已有函数使用经测试过的功能程序MathWorks网站FileExchange第四章Matlab程序设计Matlab程序设计与应用2021/11/2364.5程序设计优化例已知求y的表达式,当n=100时,求y的值。程序如下:y=0;n=100;fori=1:ny=y+1/i/i;