已阅读5页,还剩59页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.,1,数学实验,MathematicalExperiments,第4章MATLAB程序设计和M文件,华锐学院数计系张加勇办公室:2号楼312办公电话:6391028移动电话.,第4章程序设计和M文件,4.1.M文件,4.2.程序控制,4.3.函数的使用,4.4.匿名函数,inline对象和函数句柄,.,用MATLAB语言编写的程序,称为M文件。M文件有两类:命令文件和函数文件。命令文件:没有输入参数,也不返回输出参数。函数文件:可以输入参数,也可返回输出参数。,4.1M文件,定义,.,一M文件的建立与编辑1.建立新的M文件(1)菜单操作:MATLAB命令窗口的File菜单New菜单项M-file命令。(2)命令操作:在MATLAB命令窗口输入命令edit。(3)命令按钮操作:单击MATLAB命令窗口工具栏上的“新建”命令按钮。2.编辑已有的M文件,4.1M文件,.,二M文件的分类M文件有两种即M脚本文件(ScriptFile)(命令文件)和M函数文件(FunctionFile)。,4.1M文件,.,1.命令文件,对于一些比较简单的问题,在指令窗中直接输入指令计算.对于复杂计算,采用命令文件最为合适.MATLAB只是按文件所写的指令执行.M命令文件的特点是:M文件中定义的变量为全局变量.命令文件运行后,所产生的所有变量都驻留在MATLAB基本工作空间(Baseworkspace)中。只要用户不使用清除指令(clear),MATLAB指令窗不关闭,这些变量将一直保存在基本工作空间中。要注意避免工作空间和脚本文件中的同名变量相互覆盖,一般在M脚本文件的开头使用“clear”命令清除工作空间的变量。,.,例4.1:在M文件编辑调试器窗口中编写M脚本文件得出10-50范围内的所有素数。,%EX4_1计算10-50内的素数cleary1=primes(50);%获得50以内的所有素数n=length(primes(10);%获得10以内素数的个数y=y1(n+1:end)在命令窗口中输入:ex4_1y=1113171923293137414347在工作空间中就可以查看到变量y1、n和y,并可以修改和使用这些变量。,.,2.M函数文件,M函数文件的说明如下:(1)M函数文件中的函数声明行是必不可少的;(2)M函数文件在运行过程中产生的变量都存放在函数本身的工作空间中,函数的工作空间是独立的、临时的,随具体的M函数文件调用而产生并随调用结束而删除,在MATLAB运行过程中如果运行多个函数则产生多个临时的函数空间;(3)当文件执行完最后一条命令或遇到“return”命令时就结束函数文件的运行,同时函数工作空间的变量被清除;(4)一个M函数文件至少定义一个函数。,函数声明行的格式:function输出参数列表=函数名(输入参数列表)说明:函数名是函数的名称,保存时最好函数名与文件名一致,当不一致时MATLAB以文件名为准;输入参数列表是函数接收的输入参数,多个参数间用“,”分隔;输出参数列表是函数运算的结果。,.,M函数文件的一般结构,1.函数声明行函数声明行是在M函数文件的第一行,只有M函数文件必须有,以“function”引导并指定函数名、输入和输出参数。(M脚本文件没有函数声明行。)2.H1行H1行是帮助文字的第一行。3.帮助文本4.程序代码程序代码由MATLAB语句和注释语句构成。,.,例4.2建立一个函数文件将变量a,b的值互换,然后在命令窗口调用该函数文件。首先建立函数文件fexch.m:functiona,b=fexch(a,b)%exchc=a;a=b;b=c;然后在MATLAB的命令窗口调用该函数文件:clear;x=1:10;y=11,12,13,14;15,16,17,18;x,y=fexch(x,y),目录,.,由上例可以看出函数文件的一般格式为:,function输出表函数名(输入表)函数体,函数文件的第一行必须是以关键字function开始,表明该文件是函数文件输入表是以逗号相分隔的形参输出表是函数的返回值如果返回值只有一个方括号可以省略;如果返回值不止一个,输出表中的各个变量要以逗号隔开,.,标准的函数文件基本结构。(1)函数定义行(关键字function)functionout1,out2,.=filename(in1,in2,.)输入和输出(返回)的参数个数分别由nargin和nargout两个MATLAB保留的变量来给出。(2)第一行帮助行,即H1行以(%)开头,作为lookfor指令搜索的行,可以使程式易於了解与管理。特别要说明的是,第一注解行通常用来简短说明此M档案的功能,以便lookfor能以关键字比对的方式来找出此M档案。举例来说,fexch.m的第一注解行包含exch这个字,因此如果键入lookforexch,MATLAB即可列出所有在第一注解行包含exch的M档案,因而fexch.m也会被列名在内。,.,(3)函数体说明及有关注解,以(%)开头,用以说明函数的作用及有关内容(4)函数体语句函数体内使用的除返回和输入变量这些在function语句中直接引用的变量以外的所有变量都是局部变量,即在该函数返回之后,这些变量会自动在MATLAB的工作空间中清除掉。如果希望这些中间变量成为在整个程序中都起作用的变量,则可以将它们设置为全局变量,.,三数据的输入输出,1input函数调用格式为:A=input(提示信息,选项);其中,提示信息为一个字符串,用于提示用户输入什么样的数据。如果在input函数调用时采用s选项,则允许用户输入一个字符串。例如,想输入一个人的姓名,可采用命令:xm=input(Whatsyourname?,s)Whatsyourname?xiaoweixm=xiaowei,目录,.,2disp函数调用格式为disp(输出项)其中输出项既可以为字符串,也可以为矩阵。注意:用disp函数显示矩阵时将不显示矩阵的名字,而且其格式更紧密,且不留任何没有意义的空行。,目录,.,例4.3求一元二次方程ax2+bx+c=0的根。程序如下: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),目录,disp(x)显示x的内容,与x的区别是:前者仅显示x的内容,后者多个x=.,a=?3b=?4c=?9x1=-0.66667+1.5986i,x2=-0.66667-1.5986i,.,3pause函数其调用格式为:pause(延迟秒数)如果省略延迟时间,直接使用pause,则将暂停程序,直到用户按任一键后程序继续执行。若要强行中止程序的运行可使用Ctrl+C命令。,目录,.,第4章程序设计和M文件,4.1.M文件,4.2.程序控制,4.3.函数的使用,4.4.匿名函数,inline对象和函数句柄,.,4.2程序控制,1.if结构(1)if条件1语句段1elseif条件2语句段2.else语句段nend,(2)if条件1语句段1end语句段2(3)if条件1语句段1else语句段2end语句段3,一分支控制:有选择地运行程序块,分支控制;循环控制;错误控制;终止运行控制,.,条件控制有选择地运行代码块例4.4判闰年程序,程序设计中的流程控制,year=input(inputyear:=);n1=year/4;n2=year/100;n3=year/400;ifn1=fix(n1)s1=fix(score/10);%取十位数switchs1case9,10s=优case8s=良case7s=中case6s=及格otherwises=不及格end,.,4.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为列向量,程序设计中的循环控制,例4.6计算斐波那契数列n=input(inputn:=);f(1)=1;f(2)=1;fork=3:nf(k)=f(k-1)+f(k-2);endf(n),f(44)=701408733,9/16,.,例已知5个学生4门功课的成绩,求每名学生的总成绩。程序如下:s=0;a=65,76,56,78;98,83,74,85;76,67,78,79;98,58,42,73;67,89,76,87fork=as=s+k;enddisp(s);,a=6576567898837485766778799858427367897687275340300271319,.,2.while循环将循环体中语句循环执行直到条件不成立为止。语法:while条件表达式可执行语句end,条件表达式一般由变量、数字、逻辑运算、关系运算符和一般运算符组成,以判断循环的进行和停止;只要表达式的值(逻辑值)结果为正确(非0),循环继续;直到表达式值为0,循环停止。,程序设计中的循环控制,10/16,.,例4.73n+1问题.(角谷猜想),n=input(inputn=);whilen=1r=rem(n,2);ifr=0n=n/2elsen=3*n+1endend,对任一自然数n,按如下法则进行运算:若n为偶数,则将n除以2;若n为奇数,则将n乘以3加1。将运算结果按上面法则继续运算,重复若干次后结果最终是1.,n=516,8,4,2,1,程序设计中的流程控制,11/16,.,3.continue命令通常用于for或while循环语句中,与if语句一起使用,达到跳过本次循环,去执行下一轮循环的目的,例4.8分析下列程序,说明运行结果及原因a=3;b=6;fori=1:3b=b+1ifitimesMatrixdimensionsmustagree.lastid=MATLAB:dimagree,.,四流程控制命令,1.return命令:用于提前结束程序的执行,并立即返回到上一级调用函数或等待键盘输入命令,一般用于遇到特殊情况需要立即退出程序或终止键盘方式。应注意当程序进入死循环时,则Ctrl+break键来终止程序的运行。2.keyboard命令:用来使程序暂停运行,等待键盘命令,命令窗口出现“K”提示符,当键盘输入“return”后,程序才继续运行。keyboard命令可以用来在程序调试或程序执行时使用。,4.2程序控制,.,第4章程序设计和M文件,4.1.M文件,4.2.程序控制,4.3.函数的使用,4.4.匿名函数,inline对象和函数句柄,.,4.3函数的使用,1.主函数一个M函数文件中可以包含一个或多个函数,主函数是出现在文件最上方的函数,即第一行声明的函数,一个M文件只能有一个主函数,通常主函数名与M函数文件名相同。2.子函数(1)子函数的次序无任何限制;(2)子函数只能被同一文件中的函数(主函数或子函数)调用,不能被其它文件的函数调用;(3)同一文件的主函数和子函数运行时的工作空间是相互独立的。,一主函数和子函数,.,二函数的输入输出参数,1.参数的传递函数的参数传递是将主调函数中的变量值传给被调函数的输入参数(1)函数参数传递的是数值(2)被调函数的输入参数存放在函数的工作空间中,与MATLAB的工作空间是独立的,当调用结束时函数的工作空间被清除,输入参数也被清除。,4.3函数的使用,.,2.输入输出参数的个数,(1)nargin和nargout函数nargin(fun)%获取函数fun的输入参数个数nargout(fun)%获取函数fun的输出参数个数说明:fun是函数名,可以省略,当nargin和nargout函数在函数体内时fun可省略,在函数外时fun不省略。(2)varargin和varargout函数varargin和varargout函数将函数调用时实际传递的参数构成元胞数组,通过访问元胞数组中各元素内容来获得输入输出变量。functiony=fun(varargin)%输入参数为varargin的函数funfunctionvarargout=fun(x)%输出参数为varargout的函数fun,.,例4.12nargin用法示例。函数文件examp.m:functionfout=examp(a,b,c)ifnargin=1fout=a;elseifnargin=2fout=a+b;elseifnargin=3fout=(a*b*c)/2;end命令文件mydemo.m:x=1:3;y=1;2;3;examp(x)examp(x,y)examp(x,y,3),目录,mydemoans=123ans=246ans=21,.,例4.13根据输入参数的个数将例4-12中参数个数使用varargin和varargout函数,绘制不同线型曲线.,functionvarargout=ex4_13(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=ex4_13(r,o)varargout=2y=2ex4_13(b,p)varargout=2ans=2,.,三局部变量、全局变量和静态变量,1.局部变量局部变量(LocalVariables)的作用范围只能在函数内部。2.全局变量全局变量在使用前必须用“global”声明,而且每个要共享全局变量的函数和工作空间,都必须逐个用“global”对该变量加以声明清除全局变量可以使用clear命令,命令格式如下:clearglobal变量名%清除某个全局变量clearglobal%清除所有的全局变量3.静态变量静态变量的使用范围也在函数的工作空间中,但函数运行完时静态变量不被清除。,.,全局变量用命令global定义。函数文件的内部变量是局部的,与其他函数文件及MATLAB工作空间相互隔离。例4.14全局变量应用示例。先建立函数文件wadd.m,该函数将输入的参数加权相加。functionf=wadd(x,y)globalALPHABETAf=ALPHA*x+BETA*y;在命令窗口中输入:globalALPHABETAALPHA=1;BETA=2;s=wadd(1,2),目录,s=5,.,四嵌套函数和私有函数,1.嵌套函数在MATLAB中一个函数的内部还可以定义一个或多个函数,这种定义在其他函数内部的函数就称为嵌套函数。2.私有函数私有函数是限制访问权限的函数,私有函数存放在“private”子目录中,只能被其直接父目录的M函数文件所调用。,functionA(x)functionB(x,y)endend,.,五函数的工作过程和工作空间,1.函数的搜索过程当在MATLAB中输入一个函数名时,首先确认不是变量名后,函数搜索的顺序如下:检查是否是本M函数文件内部的子函数;检查是否是“private”目录下的私有函数;检查是否在当前路径中;检查是否在搜索路径中。2.函数的工作空间每一个M函数运行时都有一个内存区,称为函数的工作空间。,.,第4章程序设计和M文件,4.1.M文件,4.2.程序控制,4.3.函数的使用,4.4.匿名函数,inline对象和函数句柄,.,4.4匿名函数、inline对象和函数句柄,匿名函数是面向命令行代码的函数形式,通常只有一句很简单的语句。fhandle=(arg1,arg2,.)(expr)%创建匿名函数说明:fhandle是函数句柄;arg1,arg2,.是参数列表,也可以省略;expr是函数表达式。例:fhnd1=(x)(1+exp(-x);%创建匿名函数rf1=fhnd1(2)%调用匿名函数rf1=1.1353,一匿名函数,.,二inline对象,创建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.1139,.,三函数句柄,函数句柄(Function_Handle)包含了函数的路径、函数名、类型以及可能存在的重载方法,即函数是否为内部函数、M文件、子函数、私有函数等。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并保存为“ex5_18.m”文件:functiony=ex5_18(x)%EX5_18y=exp(-x).*sin(x)fnd=ex5_18x=0:10;y=fnd(x),.,四匿名函数、inline对象和函数句柄应用,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-.*),1fplot命令,.,2ezplot命令,ezplot命令也是用于绘制函数在某一自变量区域内的图形,ezplot命令格式如下:语法:ezplot(fun,min,max)%绘制函数fun的曲线ezplot(x,y,tmin,tmax)说明:fun是函数句柄或函数名;min,max是自变量的范围,可省略,省略时默认为-2*pi,2*pi,当fun是二元函数,则范围是xminxmaxyminymax;x和y是指x(t)和y(t);tmin,tmax是t的范围,可省略,省略时范围是0,2*pi。例:ezplot(x2+y2-1,-3,3,-3,3),,或f=(x,y)(x.2+y.2-1);ezplot(f,-3,3,-3,3),.,3quad命令,一元函数的数值积分,采用自适应的Simpson方法。q=quad(fun,a,b,tol,trace)例:计算定积分,法二:fhnd=(x)(exp(-x.2);q2=quad(fhnd,-1,1),法一:functionf=fun(x)f=exp(-x.2);endq1=quad(fun,-1,1),法三:f=inline(exp(-x.2);q3=quad(f,-1,1),.,绘图和编程补遗,视频动画以电影方式产生视频帧并播放动画,显示二阶系统当阻尼系数在01范围内不断增大时,阶跃响应曲线的动画。(1)使用getframe生成视频帧矩阵MOVx=0:0.1:10;n=1fork=0:0.02:0.98y=1-1/sqrt(1-k2)*exp(-k*x).*sin(sqrt(1-k2)*x+acos(k);plot(x,y);holdonaxis(0,10,-0.5,2.5)MOV(n)=getframen=n+1endaxis(0,10,-0.5,2.5)movie(MOV),.,例以对象方式创建动画,显示一个红色圆点沿三维曲线移动的动画。,x=0:0.1:20*pi;p=plot3(sin(x),cos(x),x);%在起点定义一个红色的圆点并设置擦除方式h=line(0,1,0,color,red,marker,.,markersize,20,erasemode,xor);fork=0:0.1:20*pi%设定红点的新位置set(h,xdata,sin(k),ydata,cos(k),zdata,k)drawnowend,.,例分别在4个不同的图形窗口绘制出正弦、余弦、正切、余切曲线。要求先建立一个图形窗口并绘图,然后每关闭一个再建立下一个,直到建立第4个窗口并绘图。,程序如下:x=linspace(0,2*pi,60);y=sin(x);z=cos(x);t=tan(x);ct=1./(t+eps);%命令组待用C4=figure(Name,cotangent(x),NumberTitle,.off);plot(x,ct);axis(0,2*pi,-40,40);C3=figure(Name,tangent(x),DeleteFcn,C4,.NumberTitle,off);plot(x,t);axis(0,2*pi,-40,40);C2=figure(Name,cos(x),DeleteFcn,C3,.NumberTitle,off);plot(x,z);axis(0,2*pi,-1,1);%先创建1个图形窗口并绘制曲线figure(Name,sin(x),DeleteFcn,C2,NumberTitle,off);plot(x,y);axis(0,2*pi,-1,1);,.,例利用坐标轴对象实现图形窗口的任意分割。程序如下:,clf;%清图形窗口axes(position,0.1,0.1,0.2,0.5);plot(x,y);title(sin(x)-1);axes(position,0.3,0.2,0.2,0.5);stairs(x,y);title(sin(x)-2);axes(position,0.55,0.6,0.25,0.3);stem(x,y);title(sin(x)-3);axes(position,0.55,0.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年珠海市斗门区政务服务中心(窗口人员)招聘笔试备考试题及答案详解
- 2026年吉安市吉州区医疗系统事业编人员招聘笔试备考题库及答案详解
- 2026年内蒙古自治区医疗系统事业编人员招聘笔试备考题库及答案详解
- 高中阶段中医面诊试题及参考答案
- 2026年伊春市新青区政务服务中心(窗口人员)招聘考试参考题库及答案详解
- 2026年漳州市芗城区政务服务中心(窗口人员)招聘笔试参考题库及答案详解
- 2026年山东省菏泽市医疗系统事业编人员招聘笔试备考题库及答案详解
- 2026年湖南娄底冷水江市科创集团有限公司招聘3人笔试备考题库及答案详解
- 电子信息产品经销合同发展与协调
- 2026年南宁市西乡塘区工会人员招聘考试模拟试题及答案详解
- 新疆油气田钻井固体废物综合利用污染控制要求(DB 65-T 3997-2017)
- 中国融通资源开发集团有限公司物资接收、仓储人员专项招聘87人笔试模拟试题及答案详解
- 2026年共青团入团考试试题附标准答案
- 2026郑州市新初一三科分班摸底卷摸底卷
- 2026年渭南市大荔县数学三下期末统考模拟试题含答案
- (2024版)中国成人暴发性心肌炎诊断和治疗指南课件
- (2026年)痔疮的诊断和治疗健康宣教课件
- 老年人慢性病管理与护理
- (2026年)血气分析临床解读课件
- 分布式光伏开发建设导则
- 给水用聚乙烯(pe)管道系统第部分管件
评论
0/150
提交评论