程序设计和M文件.ppt
- 文档编号:18878329
- 上传时间:2024-02-07
- 格式:PPT
- 页数:47
- 大小:159KB
程序设计和M文件.ppt
《程序设计和M文件.ppt》由会员分享,可在线阅读,更多相关《程序设计和M文件.ppt(47页珍藏版)》请在冰点文库上搜索。
第第5章章程序设计和程序设计和M文件文件5.1程序控制程序控制5.2M文件结构文件结构5.3函数的使用函数的使用5.4程序的调试程序的调试5.5匿名函数、匿名函数、inline对象和函数句柄对象和函数句柄5.6函数绘图函数绘图5.7数值分析数值分析5.1程序控制程序控制5.1.1分支控制语句分支控制语句1.if结构结构if条件条件1语句段语句段1elseif条件条件2语句段语句段2.else语句段语句段nendx=-5:
0.1:
-2;ifx=1y=x.2-1elseif-1xscore=98;s1=fix(score/10);%取十位数取十位数switchs1case9,10s=优优case8s=良良case7s=中中case6s=及格及格otherwises=不及格不及格end5.1.2循环控制语句循环控制语句1.for循环循环for循环变量循环变量=array循环体循环体end说明:
说明:
array可以是向量也可以是矩阵,循环执行的次数可以是向量也可以是矩阵,循环执行的次数就是就是array的列数的列数,每次循环中循环变量依次取,每次循环中循环变量依次取array的各的各列并执行循环体,直到列并执行循环体,直到array所有列取完。
所有列取完。
forn=1:
5%循环循环5次次forn=-1:
0.1:
1%循环循环21次次forn=linspace(-2*pi,2*pi,5)%循环循环5次次a=eye(2,3);forn=a%循环循环3次,次,n为列向量为列向量练习练习2.while循环循环while条件表达式条件表达式循环体循环体end例例5-4使用使用while循环计算循环计算f(x)=sin(x),xx=0.1;whilexstr=Theresultis100.;len=length(str);s=;forn=1:
lenifstr(n)9|str(n)a=135;b=123;tryc=a.*bcatchc=a.*bendlastmsg,lastid=lasterr结果:
结果:
c=1615lastmsg=Errorusing=timesMatrixdimensionsmustagree.lastid=MATLAB:
dimagree5.1.4流程控制命令流程控制命令1.return命令命令return命令用于提前结束程序的执行,并立即返回命令用于提前结束程序的执行,并立即返回到上一级调用函数或等待键盘输入命令,一般用于到上一级调用函数或等待键盘输入命令,一般用于遇到特殊情况需要立即退出程序或终止键盘方式。
遇到特殊情况需要立即退出程序或终止键盘方式。
应注意当程序进入死循环时,则按应注意当程序进入死循环时,则按Ctrl+break键来键来终止程序的运行。
终止程序的运行。
2.keyboard命令命令keyboard命令用来使程序暂停运行,等待键盘命命令用来使程序暂停运行,等待键盘命令,命令窗口出现令,命令窗口出现“K”提示符,当键盘输入提示符,当键盘输入“return”后,程序才继续运行。
后,程序才继续运行。
keyboard命令可命令可以用来在程序调试或程序执行时使用。
以用来在程序调试或程序执行时使用。
3.input命令命令r=input(str,s)%从键盘中输入数据保存到变量从键盘中输入数据保存到变量r。
4.disp命令命令disp命令是较常用的显示命令,常用来显命令是较常用的显示命令,常用来显示字符串型的信息提示。
示字符串型的信息提示。
5.pause命令命令pause命令用来使程序暂停运行,当用户命令用来使程序暂停运行,当用户按任意键才继续执行。
常用于程序调试或查按任意键才继续执行。
常用于程序调试或查看中间结果,也可以用来控制执行的速度。
看中间结果,也可以用来控制执行的速度。
pause的命令格式如下:
的命令格式如下:
pause(n)%暂停暂停n秒秒练习练习5.2M文件结构文件结构MATLAB7.3的程序如果要保存则使用扩的程序如果要保存则使用扩展名是展名是“.m”的的M文件,文件,M文件有两种即文件有两种即M脚本文件(脚本文件(ScriptFile)和)和M函数文件函数文件(FunctionFile)。
)。
5.2.1M文件的一般结构文件的一般结构1.函数声明行函数声明行函数声明行是在函数声明行是在M函数文件的第一行,只有函数文件的第一行,只有M函函数文件必须有,以数文件必须有,以“function”引导并指定函数名、引导并指定函数名、输入和输出参数,输入和输出参数,M脚本文件没有函数声明行。
脚本文件没有函数声明行。
2.H1行行H1行是帮助文字的第一行。
行是帮助文字的第一行。
3.帮助文本帮助文本4.程序代码程序代码程序代码由程序代码由MATLAB语句和注释语句构成。
语句和注释语句构成。
在命令窗口中使用在命令窗口中使用在命令窗口中使用在命令窗口中使用lookforlookfor和和和和helphelp命令查找命令查找命令查找命令查找“ex5_9”ex5_9”的信息,的信息,的信息,的信息,则则则则lookforlookfor只显示只显示只显示只显示H1H1行的信息,而行的信息,而行的信息,而行的信息,而helphelp命令显示命令显示命令显示命令显示H1H1行和其它行和其它行和其它行和其它注释文本注释文本注释文本注释文本.程序代码程序代码帮助文本帮助文本函数声明行函数声明行H1行行5.2.2M脚本文件和脚本文件和M函数文件函数文件1.M脚本文件脚本文件M脚本文件的说明如下:
脚本文件的说明如下:
(1)MATLAB在运行脚本文件时,只是简单地在运行脚本文件时,只是简单地按顺序从文件中读取一条条命令,送到按顺序从文件中读取一条条命令,送到MATLAB命命令窗口中去执行;令窗口中去执行;
(2)M脚本文件运行产生的变量都驻留在脚本文件运行产生的变量都驻留在MATLAB的工作空间中,可以很方便地查看变量,的工作空间中,可以很方便地查看变量,在命令窗口中运行的命令都可以使用这些变量;在命令窗口中运行的命令都可以使用这些变量;(3)脚本文件的命令可以访问工作空间的所有数)脚本文件的命令可以访问工作空间的所有数据,因此要注意避免工作空间和脚本文件中的同名据,因此要注意避免工作空间和脚本文件中的同名变量相互覆盖,一般在变量相互覆盖,一般在M脚本文件的开头使用脚本文件的开头使用“clear”命令清除工作空间的变量。
命令清除工作空间的变量。
例例5-8在在M文件编辑调试器窗口中编写文件编辑调试器窗口中编写M脚本脚本文件得出文件得出10-50范围内的所有素数。
范围内的所有素数。
%EX5_8计算计算10-50内的素数内的素数cleary1=primes(50);%获得获得50以内的所有素数以内的所有素数n=length(primes(10);%获得获得10以内素数的个数以内素数的个数y=y1(n+1:
end)在命令窗口中输入:
在命令窗口中输入:
ex5_8y=1113171923293137414347在工作空间中就可以查看到变量在工作空间中就可以查看到变量y1、n和和y,并,并可以修改和使用这些变量。
可以修改和使用这些变量。
2.M函数文件函数文件M函数文件的说明如下:
函数文件的说明如下:
(1)M函数文件中的函数声明函数文件中的函数声明行是必不可少的;行是必不可少的;
(2)M函数文件在运行过程中函数文件在运行过程中产生的变量都存放在函数本身的工产生的变量都存放在函数本身的工作空间中,函数的工作空间是独立作空间中,函数的工作空间是独立的、临时的,随具体的的、临时的,随具体的M函数文件函数文件调用而产生并随调用结束而删除,调用而产生并随调用结束而删除,在在MATLAB运行过程中如果运行运行过程中如果运行多个函数则产生多个临时的函数空多个函数则产生多个临时的函数空间;间;(3)当文件执行完最后一条命)当文件执行完最后一条命令或遇到令或遇到“return”命令时就结束命令时就结束函数文件的运行,同时函数工作空函数文件的运行,同时函数工作空间的变量被清除;间的变量被清除;(4)一个)一个M函数文件至少要定函数文件至少要定义一个函数。
义一个函数。
函数声明行的格式如下:
函数声明行的格式如下:
function输出参数列表输出参数列表=函数名函数名(输入参数列表输入参数列表)说明:
说明:
函数名是函数的名称,保函数名是函数的名称,保存时最好函数名与文件名一存时最好函数名与文件名一致,当不一致时,致,当不一致时,MATLAB以文件名为准;以文件名为准;输入参数列表是函数接收输入参数列表是函数接收的输入参数,多个参数间用的输入参数,多个参数间用“,”分隔;分隔;输出参数列表是函数运算输出参数列表是函数运算的结果。
的结果。
例例5-9将例将例5-7的计算行向量乘积的运算的计算行向量乘积的运算使用使用M函数文件保存。
函数文件保存。
functionc=ex5_9(a,b)%EX5_9(a,b)returnstheproductofaandb%cistheproduct%aisthemultiplier%bisthemultiplicand%copyright2007-10-01tryc=a.*b;catchc=a.*b;end调用该函数:
调用该函数:
z=ex5_9(123,456)z=410185.3函数的使用函数的使用5.3.1主函数和子函数主函数和子函数1.主函数主函数一个一个M函数文件中可以包含一个或多个函数,主函数文件中可以包含一个或多个函数,主函数是出现在文件最上方的函数,即第一行声明函数是出现在文件最上方的函数,即第一行声明的函数,一个的函数,一个M文件只能有一个主函数,通常主函文件只能有一个主函数,通常主函数名与数名与M函数文件名相同。
函数文件名相同。
2.子函数子函数
(1)子函数的次序无任何限制;)子函数的次序无任何限制;
(2)子函数只能被同一文件中的函数(主函数)子函数只能被同一文件中的函数(主函数或子函数)调用,不能被其它文件的函数调用;或子函数)调用,不能被其它文件的函数调用;(3)同一文件的主函数和子函数运行时的工作)同一文件的主函数和子函数运行时的工作空间是相互独立的。
空间是相互独立的。
例例5-105.3.2函数的输入输出参数函数的输入输出参数1.参数的传递参数的传递函数的参数传递是将主调函数中的变量值函数的参数传递是将主调函数中的变量值传给被调函数的输入参数传给被调函数的输入参数
(1)函数参数传递的是数值)函数参数传递的是数值
(2)被调函数的输入参数是存放在函数)被调函数的输入参数是存放在函数的工作空间中,与的工作空间中,与MATLAB的工作空间是的工作空间是独立的,当调用结束时函数的工作空间被清独立的,当调用结束时函数的工作空间被清除,输入参数也被清除。
除,输入参数也被清除。
y=p1(zeta,t)functiony=p1(z,x)参数传递参数传递2.输入输出参数的个数输入输出参数的个数
(1)nargin和和nargout函数函数nargin(fun)%获取函数获取函数fun的输入参数个的输入参数个数数nargout(fun)%获取函数获取函数fun的输出参数个的输出参数个数数说明:
说明:
fun是函数名,可以省略,当是函数名,可以省略,当nargin和和nargout函数在函数体内时函数在函数体内时fun可省略,在函可省略,在函数外时数外时fun不省略。
不省略。
例例5-11当输入参数个数变化时使用当输入参数个数变化时使用nargin函数绘函数绘制不同线型的曲线。
制不同线型的曲线。
functionn=ex5_11(s1,s2)x=0:
10;y=nargin*ones(11,1);holdonifnargin=0plot(x,y)%实线曲线实线曲线elseifnargin=1plot(x,y,s1)elseplot(x,y,s1s2)end调用命令:
ex5_11ex5_11(r)ex5_11(k,o)nargin(ex5_11)ans=2ex5_11(g,:
p)
(2)varargin和和varargout函数函数varargin和和varargout函数将函数调用时实函数将函数调用时实际传递的参数构成元胞数组,通过访问元胞际传递的参数构成元胞数组,通过访问元胞数组中各元素内容来获得输入输出变量。
数组中各元素内容来获得输入输出变量。
functiony=fun(varargin)%输入参数为输入参数为varargin的函数的函数funfunctionvarargout=fun(x)%输出参数为输出参数为varargout的函数的函数fun例例5-12根据输入参数的个数将例根据输入参数的个数将例5-11中参数个数使用中参数个数使用varargin和和varargout函数,绘制不同线型的曲线,绘制的函数,绘制不同线型的曲线,绘制的曲线与图曲线与图5-6相同。
相同。
functionvarargout=ex5_12(varargin)x=0:
10;lin=length(varargin);%取输入参数个数取输入参数个数y=lin*ones(11,1);holdoniflin=0plot(x,y)elseiflin=1plot(x,y,varargin1)elseplot(x,y,varargin1varargin2)endvarargout1=lin在命令窗口中输入在命令窗口中输入调用命令:
调用命令:
y=ex5_12(y,o)varargout=2y=2ex5_12(y,o)varargout=2ans=25.3.3局部变量、全局变量和静态变量局部变量、全局变量和静态变量1.局部变量局部变量局部变量(局部变量(LocalVariables)的作用范围只能在函)的作用范围只能在函数内部。
数内部。
2.全局变量全局变量全局变量在使用前必须用全局变量在使用前必须用“global”声明,而且声明,而且每个要共享全局变量的函数和工作空间,都必须逐每个要共享全局变量的函数和工作空间,都必须逐个用个用“global”对该变量加以声明对该变量加以声明.要清除全局变量可以使用要清除全局变量可以使用clear命令,命令格式如命令,命令格式如下:
下:
clearglobal变量名变量名%清除某个全局变量清除某个全局变量clearglobal%清除所有的全局变量清除所有的全局变量例例5-13在主函数和子函数之间使用全局变量,绘在主函数和子函数之间使用全局变量,绘制的输出曲线如图制的输出曲线如图5-6所示。
所示。
functiony=ex5_13()globalT%全局变量全局变量TT=0:
0.1:
20;y=f1(0.2)plot(T,y)functiony=f1(w)globalT%全局变量全局变量y=sin(w*T)3.静态变量静态变量静态变量的使用范围也在函数的工作空间静态变量的使用范围也在函数的工作空间中,但函数运行完时静态变量不被清除。
中,但函数运行完时静态变量不被清除。
(1)mlock函数函数mlock函数是将正在运行的函数是将正在运行的M函数文件的变量锁函数文件的变量锁定,放在函数内部成为静态变量,就不会被定,放在函数内部成为静态变量,就不会被“clear”命令清除了,命令格式如下:
命令清除了,命令格式如下:
(2)munlock函数函数munlock函数与函数与mlock正好相反,解除正好相反,解除M函数文函数文件工作空间的锁定,命令格式如下:
件工作空间的锁定,命令格式如下:
5.3.4嵌套函数、私有函数和重载函数嵌套函数、私有函数和重载函数1.嵌套函数嵌套函数在在MATLAB中一个函数的内部还可以定义中一个函数的内部还可以定义一个或多个函数,这种定义在其他函数内部一个或多个函数,这种定义在其他函数内部的函数就称为嵌套函数。
的函数就称为嵌套函数。
2.私有函数私有函数私有函数是限制访问权限的函数,私有函私有函数是限制访问权限的函数,私有函数存放在数存放在“private”子目录中,只能被其子目录中,只能被其直接父目录的直接父目录的M函数文件所调用。
函数文件所调用。
functionA(x)functionB(x,y)endend3.重载函数重载函数重载函数是指两个函数使用相同的名称,重载函数是指两个函数使用相同的名称,处理的功能相似,但参数类型或个数不同,处理的功能相似,但参数类型或个数不同,重载函数通常放在不同的文件夹下,文件夹重载函数通常放在不同的文件夹下,文件夹名称以名称以“”开头后面跟一个数据类型名开头后面跟一个数据类型名。
例如,例如,“int”文件夹下放置的是参数类文件夹下放置的是参数类型为型为int的函数文件,的函数文件,5.3.5函数的工作过程和函数的工作过程和P码文件码文件1.函数的搜索过程函数的搜索过程当在当在MATLAB中输入一个函数名时,首先中输入一个函数名时,首先确认不是变量名后,函数搜索的顺序如下:
确认不是变量名后,函数搜索的顺序如下:
检查是否是本检查是否是本M函数文件内部的子函数;函数文件内部的子函数;检查是否是检查是否是“private”目录下的私有函数;目录下的私有函数;检查是否在当前路径中;检查是否在当前路径中;检查是否在搜索路径中。
检查是否在搜索路径中。
2.P码文件码文件P码就是伪代码(码就是伪代码(Pseudocode),一个),一个M文文件第一次被调用时,件第一次被调用时,MATLAB就将其进行编就将其进行编译并生成译并生成P码文件存放在内存中,生成的码文件存放在内存中,生成的P码码文件与原文件与原M文件名相同,其扩展名为文件名相同,其扩展名为“.p”,P码文件的保密性好。
码文件的保密性好。
pcodeFile1.m,File2.m.-inplace%生成生成File1.p,File2.p文件文件3.函数的工作空间函数的工作空间每一个每一个M函数运行时都有一个内存区,称为函数运行时都有一个内存区,称为函数的工作空间。
函数的工作空间。
5.4程序的调试程序的调试5.4.1直接检测直接检测
(1)对于需要检测的变量可以通过删除语句行末)对于需要检测的变量可以通过删除语句行末尾的尾的分号分号,或在程序的适当位置加显示变量值的语,或在程序的适当位置加显示变量值的语句,将结果显示在命令窗口中;句,将结果显示在命令窗口中;
(2)调试函数时,可以将该函数的第一句函数声)调试函数时,可以将该函数的第一句函数声明行前加明行前加“%”,并给输入参数赋值,就可以以脚本,并给输入参数赋值,就可以以脚本文件的方式来执行该函数,避免多个函数在一起运文件的方式来执行该函数,避免多个函数在一起运行时查错不方便;行时查错不方便;(3)在程序的适当位置添加)在程序的适当位置添加“keyboard”语句,语句,当程序运行至此句会暂停运行,并在命令窗口显示当程序运行至此句会暂停运行,并在命令窗口显示“k”提示符,这时就可以在命令窗口查看和修改提示符,这时就可以在命令窗口查看和修改各变量的内容。
各变量的内容。
5.4.2M文件编辑调试器窗口文件编辑调试器窗口1.“Debug”菜单菜单
(1)Step(F10)
(2)Stepin(F11)和)和Stepout(shift+F11)(3)Run/Continue(F5)(4)Set/ClearBreakpoints(F12)(5)Set/ModifyConditionalBreakpoint(6)StopifErrors/Warnings(7)ExitDebugMode2.“Cell”菜单和工具栏菜单和工具栏“Cell”菜单和工具栏是菜单和工具栏是MATLAB7.0版版后新推出的菜单,提出了单元调试的概念,后新推出的菜单,提出了单元调试的概念,将程序分成一个个独立的单元(将程序分成一个个独立的单元(cell),每),每个单元用个单元用“%”(单元分隔符)来分隔可以(单元分隔符)来分隔可以单独调试。
单独调试。
(1)InsertCellDivider
(2)EvaluateCurrentCell(3)EvaluateEntireFile(4)增减步长和增减倍数按钮)增减步长和增减倍数按钮5.5匿名函数、匿名函数、inline对象和函数句柄对象和函数句柄5.5.1匿名函数匿名函数匿名函数是面向命令行代码的函数形式,通匿名函数是面向命令行代码的函数形式,通常只有一句很简单的语句。
常只有一句很简单的语句。
fhandle=(arg1,arg2,.)(expr)%创建匿创建匿名函数名函数说明:
说明:
fhandle是函数句柄;是函数句柄;arg1,arg2,.是是参数列表,也可以省略;参数列表,也可以省略;expr是函数表达式。
是函数表达式。
例:
使用匿名函数创建例:
使用匿名函数创建fhnd1=(x)(1+exp(-x);%创建匿名函数创建匿名函数rf1=fhnd1
(2)%调用匿名函数调用匿名函数rf1=1.1353fhnd2=(x,y)(sin(fhnd1(x)+cos(fhnd1(y);%创建嵌套匿名函数rf2=fhnd2(1,2)rf2=1.4013saveex5_16fhnd1%保存匿名函数到MAT文件5.5.2inline对象对象创建创建inline对象就是使用对象就是使用inline函数函数将字符串将字符串转换成转换成inline对象对象。
inline_fun=inline(string,arg1,arg2,)%创建创建inline对象对象例:
例:
f=inline(sin(x)*exp(-z*x),x,z)%创建创建inline对象对象fclass(f)%查看查看f的类型的类型ans=inliney1=f(1,2)%调用调用inline对象对象fy1=0.11395.5.3函数句柄函数句柄函数句柄(函数句柄(Function_Handle)包含了函数的路径、)包含了函数的路径、函数名、类型以及可能存在的重载方法,函数名、类型以及可能存在的重载方法,即函数是否即函数是否为内部函数、为内部函数、M或或P文件、子函数、私有函数等文件、子函数、私有函数等。
1.创建函数句柄创建函数句柄fhandle=fun%创建函数句柄创建函数句柄2.函数句柄的调用函数句柄的调用y1,y2,=fhandle(arg1,arg2)%调用函数调用函数句柄句柄fhandley1,y2,=feval(fhandle,arg1,arg2)y1,y2,=feval(fun,arg1,arg2)例:
例:
方法一方法一fnd1=sin%创建函数句柄创建函数句柄fnd1=sinx=0:
20;y=fnd1(x)%调用函数调用函数方法二方法二:
创建函数ex5_18_1并保存为“ex5_18_1.m”文件:
functiony=ex5_18_1(x)%EX5_18_1y=exp(-x).*sin(x)fnd=ex5_18_1x=0:
10;y=fnd(x)5.6函数绘图函数绘图5.6.1fplot命令命令fplot命令可以绘制函数的曲线。
命令可以绘制函数的曲线。
fplot(fun,limits,tol,Linespec)%绘制函数绘制函数fun的曲线的曲线fplot(fun,limits,n)说明:
说明:
fun是函数句柄或函数名;是函数句柄或函数名;limits是自变量的取值范围是自变量的取值范围xminxmax或或xminxmaxyminymax;tol是相对误差度,默是相对误差度,默认为认为2e-3,可省略;,可省略;Linespec是线型,与是线型,与plot命令的设置相同,命令的设置相同,可省略;可省略;n是绘制的点数,当是绘制的点数,当n1时至少绘制时至少绘制n+1个点。
个点。
例:
例:
fhnd=(x)(exp(-x).*sin(x);fplot(fhnd,020,b-.*)5.6.2ezplot命令命令ezplot命令也是用于绘制函数在某一自变量区域内命令也是用于绘制函数在某一自变量区域内的图形,的图形,ezplot命令格式如下:
命令格式如下:
ezplot(fun,min,m
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 文件
![提示](https://static.bingdoc.com/images/bang_tan.gif)