MATLAB十二PPT课件_第1页
MATLAB十二PPT课件_第2页
MATLAB十二PPT课件_第3页
MATLAB十二PPT课件_第4页
MATLAB十二PPT课件_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

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

文档简介

MATLAB程序设计,MATLAB数据处理与应用2011-2012学年选修课,第十二讲,王文健wwj527,.SOUTHWESTJIAOTONGUNIVERSITY,2,主要内容,M脚本文件和函数文件MATLAB控制流函数调用和变量传递M文件调试方法文件I/O函数,.SOUTHWESTJIAOTONGUNIVERSITY,3,MATLAB程序设计,简介MATLAB除了指令行操作的直接交互外,作为一种高级应用软件还提供了自己的编程语言通过编写MATLAB程序,可以更加方便地调用MTALAB提供的各种功能强大的函数库,使得程序能完成复杂的运算,处理大量的数值数据MATLAB程序设计语言属于第四代编程语言,编程方式简单、编程效率高、容易维护,.SOUTHWESTJIAOTONGUNIVERSITY,4,MATLAB程序设计,简介脚本文件和函数文件是通过MATLAB程序代码构建的,是MATLAB实现运算功能的基础MATLAB提供的控制流则是控制程序流执行次序的手段文件I/O函数则是MATLAB与外界进行数据交换的重要方式M文件调试是程序设计的必备环节,.SOUTHWESTJIAOTONGUNIVERSITY,5,MATLAB程序设计,M文件简介MATLAB提供了丰富的编程语言,使得用户可以将一连串的命令写入文件,然后使用简单的函数来执行这些命令,文件被保存成文本文件,后缀为.MM文件是一个文本文件,可以使用各种文本文件对它进行修改,也可以使用MATLAB内建的M文件编辑器,还可以在MATLAB的命令窗口直接键入edit命令对文件进行编辑edit或者editwwj.Medit表示编辑新的M文件,editwwj.M是编辑已有的M文件,后缀可省略,.SOUTHWESTJIAOTONGUNIVERSITY,6,MATLAB程序设计,M文件分类脚本Scripts,它包含了MATLAB的各种命令函数Functions,它可以接受输入变量,并将运算结果送至输出变量MATLAB脚本经常用于一连串费时的命令没有输入和输出参数产生的变量放在MATLAB的基本工作空间,与其他脚本及MATLAB的命令行接口共享,.SOUTHWESTJIAOTONGUNIVERSITY,7,MATLAB程序设计,M文件分类MATLAB函数在扩充MATLAB函数库时使用可以接收参数,也可以返回参数运算中所产生的变量都存放在函数本身的工作空间中,.SOUTHWESTJIAOTONGUNIVERSITY,8,MATLAB程序设计,M文件的基本结构基本成分如下:functionf=fact(n)函数定义行%Computeafactorialvalue.%FACT(N)returnsthefactorialofN,注释%usuallydenotedbyN!帮助文档f=prod(1:n);函数体,.SOUTHWESTJIAOTONGUNIVERSITY,9,MATLAB程序设计,M文件的基本结构M文件的组成元素函数定义行定义函数名、输入输出参数的数量及顺序H1行对程序的总体介绍,但使用help或lookfor命令时会显示这些信息函数说明对程序的详细描述,当对函数使用help命令时与H1行一起显示函数或者脚本主体运行计算,产生输出的程序代码注释在程序中解释程序功能的文字,.SOUTHWESTJIAOTONGUNIVERSITY,10,MATLAB程序设计,M脚本文件因为没有输入和输出,脚本是最简单的M文件,它可以自动运行一系列的MATLAB指令如果在命令行中要重复进行某些计算,就可以使用脚本脚本与MATLAB会话共享基本工作空间,他们主要是操作工作空间中的数据,可以在工作空间中产生新的数据脚本运行完毕之后,产生的所有变量都会保存在工作空间总,可以运用这些数据进行下一步的运算,.SOUTHWESTJIAOTONGUNIVERSITY,11,MATLAB程序设计,M脚本文件举例%脚本程序%花瓣图theta=-pi:0.01:pi;rho(1,:)=2*sin(5*theta).2;rho(2,:)=cos(10*theta).3;rho(3,:)=sin(theta).2;rho(4,:)=5*cos(3.5*theta).3;fork=1:4polar(theta,rho(k,:)pauseend,.SOUTHWESTJIAOTONGUNIVERSITY,12,MATLAB程序设计,.SOUTHWESTJIAOTONGUNIVERSITY,13,MATLAB程序设计,M脚本文件脚本创建了MATLAB工作空间所需的变量,在程序执行完毕后,变量仍然保存在工作空间中,如程序中的theta和rho,可使用whos命令进行查看列表,.SOUTHWESTJIAOTONGUNIVERSITY,14,MATLAB程序设计,M函数文件M函数文件与M脚本文件不同,M函数文件通常在扩充MATLAB函数库时使用,可以接收参数,也可以返回参数,M函数将运算中产生的变量都存放在函数本身的工作空间中M函数文件对于用户来说是不透明的,外界只能看到其输入和输出当M函数文件运行时,MATLAB就会建立单独的临时工作空间,称为函数工作空间运算过程中产生的变量都存放在函数的工作空间中,并不会与MATLAB的基本工作空间中的变量相互覆盖,.SOUTHWESTJIAOTONGUNIVERSITY,15,MATLAB程序设计,M函数文件举例functiony=average(x)%m,n=size(x)if(m=1)|(n=1)|(m=1quad(sqr,0,1)因为sqr是一个函数句柄,可以将其作为参数传递给别的函数,.SOUTHWESTJIAOTONGUNIVERSITY,19,MATLAB程序设计,匿名函数匿名函数中还可以携带多个输入参数sumAxBy=(x,y)(3*x+4*y);sumAxBy(5,7)如果匿名函数中不包含任何的输入参数,后边的参数列表必须用空的括号表示t=()datestr(now);调用此函数时同样使用括号t(),否则不会调用此函数,.SOUTHWESTJIAOTONGUNIVERSITY,20,MATLAB程序设计,主函数与子函数MATLAB允许一个M函数文件包含多个函数的代码,其中第一个出现的函数称为主函数,其他的函数称为子函数保存时所用的函数文件名与主函数定义名相同MATLAB中所有非匿名函数都需要在M文件中定义每个M文件都要求有一个主函数,它最先出现在该M文件中,主函数范围比子函数要广,主函数可以在M文件外部调用,子函数则不行,.SOUTHWESTJIAOTONGUNIVERSITY,21,MATLAB程序设计,主函数与子函数同一个M文件中的主函数很子函数的工作空间是彼此独立的各函数间的信息可以通过输入输出变量、全局变量或跨空间指令进行传递子函数中的第一行是其函数声明行,而且多个子函数的排列次序可以任意改变M函数文件中,任何指令通过名字对函数进行调用时,子函数的优先级仅次于内装函数,.SOUTHWESTJIAOTONGUNIVERSITY,22,MATLAB程序设计,主函数与子函数举例:求均值和中值u=1:99;avg,med=newstats(u)如果想得到子函数的相关帮助信息,可以使用help命令,如:要获得M文件的myfun.m中的子函数mysubfun的帮助信息,可输入:helpmyfun/mysubfun,.SOUTHWESTJIAOTONGUNIVERSITY,23,MATLAB程序设计,私有函数它唯一特征是只能够在一个特定的限定函数群中可见私有函数放在以private命名的子目录下,它们只对父目录中的函数是可见的由于私有函数是对外部不可见的,因此它们可以采用与其他目录下函数相同的名字可以使用help命令获得私有函数的帮助信息,如helpprivate/muyprivfun,.SOUTHWESTJIAOTONGUNIVERSITY,24,MATLAB程序设计,嵌套函数可以在任意一个MATLAB函数体内部定义函数,它们称为外部函数的嵌套函数嵌套函数跟其它M文件函数一样,包含M文件的基本元素,当嵌套函数结束时必须用end表示结束还可以进行多重嵌套,.SOUTHWESTJIAOTONGUNIVERSITY,25,MATLAB程序设计,嵌套函数functionx=nestFun(p1,p2)x1=nestFun(p2);functiony=nestFunIn(p3)y=2*p3;endx=x1+p1;end,.SOUTHWESTJIAOTONGUNIVERSITY,26,MATLAB程序设计,嵌套函数functionA(x,y)B(x,y);D(y);functionB(x,y)C(x);D(y);functionC(x)D(x);endendend,.SOUTHWESTJIAOTONGUNIVERSITY,27,MATLAB程序设计,嵌套函数一个函数可以调用自己函数体中的嵌套函数,如A可以调用B和D,但不能调用C,同一级的嵌套函数也可以相互调用,如B和D,可以调用比自己低一级的嵌套函数,如C可以调用D嵌套函数有自己的工作空间,但它的权限访问其所嵌套地方的所有函数的工作空间,因此,被主函数赋值的变量可以被主函数中任意一个嵌套函数访问一个嵌套函数的变量值可以被任何包含它的函数访问,.SOUTHWESTJIAOTONGUNIVERSITY,28,MATLAB程序设计,嵌套函数创建函数句柄functionh=getcubehandleh=findcube;functioncube=findcube(x)cube=x.3;endend,.SOUTHWESTJIAOTONGUNIVERSITY,29,MATLAB程序设计,嵌套函数创建函数句柄cubeit=getcubehandlecubeit(8)函数getcubehandle获得嵌套函数findcube的句柄之后,将之返回给输出变量cubeit可以在M函数的外部调用访问嵌套函数findcube,.SOUTHWESTJIAOTONGUNIVERSITY,30,MATLAB程序设计,嵌套函数绘制抛物线实例函数makeparabola创建一个嵌套函数的函数句柄,然后将其传递给MATLAB的fplot函数,画出抛物线functionfhandle=makeparabola(a,b,c)fhandle=parabola;functiony=parabola(x);y=a*x.2+b*x+c;endend,.SOUTHWESTJIAOTONGUNIVERSITY,31,MATLAB程序设计,嵌套函数调用函数makeparabola,将句柄返回给变量h,求输入参数为0和25时的值h=makeparabola(1.3,0.2,30)h(0)h(25)fplot(h,-25,25),.SOUTHWESTJIAOTONGUNIVERSITY,32,MATLAB程序设计,.SOUTHWESTJIAOTONGUNIVERSITY,33,MATLAB程序设计,局部变量和全局变量每个函数都有自己的局部变量,他们与基本工作空间中的变量是相互独立的,而且不同函数的局部变量是独立的,只能在函数内部使用如果两个或多个函数想公用同一个变量,那么就可以用global将它声明成全局变量globalvariables全局变量的使用可以减少参数的传递,如果合理利用全局变量,将可以提高程序的执行效率,.SOUTHWESTJIAOTONGUNIVERSITY,34,MATLAB程序设计,局部变量和全局变量如果要查看工作空间的全局变量,则输入whosglobal,可显示出全局变量globalmanxlenmaxwidmaxlen=36;maxwid=78;len=5;wid=21;whosglobal,.SOUTHWESTJIAOTONGUNIVERSITY,35,MATLAB程序设计,MATLAB控制流所有的计算机编程语言都提供了控制程序流执行程序的语法MATLAB提供了四种控制程序流的结构for、while循环结构if-else-end循环结构switch-case循环结构try-catch循环结构,.SOUTHWESTJIAOTONGUNIVERSITY,36,MATLAB程序设计,for循环结构一般形式forv=expression(表达式)commandstatements;(执行语句)end增量默认为1,一额可以自定义增量值,增量值可以小于零,当增量大于零时,程序将在变量大于终止值时终止当增量小于零时,程序将在变量小于终止值时终止不能在for循环体内重新对循环变量赋值来终止循环的执行,.SOUTHWESTJIAOTONGUNIVERSITY,37,MATLAB程序设计,for循环结构forn=1:10 x(n)=exp(n/5)+cos(n*pi/5)n=10;nendfor循环内可以嵌套循环for语句中的变量也可以是任何合法的MATLAB数组fork=A运算指令end,.SOUTHWESTJIAOTONGUNIVERSITY,38,MATLAB程序设计,for循环结构该指令中k被设定为一维数据A(:,i),每次循环执行时,k为矩阵A中1列的所有元素,在下一列中,for循环列出先前产生的矩阵H的每一列的和利用for循环求矩阵列的和a=23;1016;2731;1413;47;fori=adisp(norm(i,1);end,.SOUTHWESTJIAOTONGUNIVERSITY,39,MATLAB程序设计,for循环结构forn=1:10 x(n)=exp(n/5)+cos(n*pi/5)n=10;nendfor循环内可以嵌套循环for语句中的变量也可以是任何合法的MATLAB数组fork=A运算指令end,.SOUTHWESTJIAOTONGUNIVERSITY,40,MATLAB程序设计,while语句whileexpression(表达式)commands;(执行语句)end只要表达式中的元素为真,就执行while与end之间的命令若不是则跳出循环体,向下继续执行利用循环语句求出1到多少的自然数的和大于或等于100,.SOUTHWESTJIAOTONGUNIVERSITY,41,MATLAB程序设计,while语句sum=0;i=0;whilesum3a(i)=6-i;endend,.SOUTHWESTJIAOTONGUNIVERSITY,46,MATLAB程序设计,if、switch条件分支结构最常见的条件语句是if-then-else,语法如下if执行语句1else执行语句2end当逻辑表达式的值为真时,则执行语句1,否则就执行语句2,.SOUTHWESTJIAOTONGUNIVERSITY,47,MATLAB程序设计,if、switch条件分支结构MATLAB还可以执行多向条件其语法为if逻辑表达式1执行语句1;elseif逻辑表达式2执行语句2;elseif逻辑表达式3执行语句3;else执行语句4;endendend,.SOUTHWESTJIAOTONGUNIVERSITY,48,MATLAB程序设计,if、switch条件分支结构if语句求解方程x=3;ifx0y=x+1;elseifx=0y=x;elsey=x-1;endend,.SOUTHWESTJIAOTONGUNIVERSITY,49,MATLAB程序设计,switchcase语句如果在一个程序中,必须针对某个变量的不同取值来做多种不同的执行,则通常使用switch语句switchexpressioncasevalue1statementscasevalue2statementsotherwisestatments,.SOUTHWESTJIAOTONGUNIVERSITY,50,MATLAB程序设计,switchcase语句var=4;switchvarcase1disp(1)case2,3,4disp(2or3or4)case5disp(5)otherwisedisp(somethingelse)end,.SOUTHWESTJIAOTONGUNIVERSITY,51,MATLAB程序设计,switchcase语句clear;fori=1:10;ai=89+i;bi=79+i;ci=69+i;di=59+i;endc=d,c;Name=Jack,Marry,Peter,Rose,Tom;Mark=72,83,56,94,100;Rank=cell(1,5);S=struct(Name,Name,Marks,Mark,Rank,Rank);fori=1:5switchS(i).Markscase100S(i).Rank=满分;,.SOUTHWESTJIAOTONGUNIVERSITY,52,MATLAB程序设计,switchcase语句caseaS(i).Rank=优秀;casebS(i).Rank=良好;casecS(i).Rank=及格;otherwiseS(i).Rank=不及格;endenddisp(学生姓名,得分,等级);disp()fori=1:5;disp(S(i).Name,blanks(6),num2str(S(i).Marks),blanks(6),S(i).Rank);end;,.SOUTHWESTJIAOTONGUNIVERSITY,53,MATLAB程序设计,try-catch语句错误控制指令提供了捕捉异常的方法,try用来检查程序代码是否产生错误,一旦错误发生,MATLAB就会立即跳到相应的catch语句中去,对错误做相应的处理functionmatricmultiply(A,B)tryX=A*Bcatchdisp*ErrormultiplyingA*Bendlasterr,.SOUTHWESTJIAOTONGUNIVERSITY,54,MATLAB程序设计,try-catch语句matricmultiply(A,B)运行结果*ErrormultiplyingA*Bans=Errorusing=mtimesInnermatrixdimensionsmustagree.,.SOUTHWESTJIAOTONGUNIVERSITY,55,MATLAB程序设计,控制程序流的其它常用指令inputkeyboardpausereturnerrorecho,.SOUTHWESTJIAOTONGUNIVERSITY,56,MATLAB程序设计,控制程序流的其它常用指令input提示用户从键盘输入数值、字符串或表达式并接收该输入user-entry=input(message)user-entry=input(message,s),.SOUTHWESTJIAOTONGUNIVERSITY,57,MATLAB程序设计,控制程序流的其它常用指令keyboardkeyboard与input指令同样有用,程序遇到keyboard指令时,MATLAB将会暂停程序的运行,并且调用机器的键盘命令进行处理区别:它允许输入任意多个MATLAB指令,而input只能给变量赋值,.SOUTHWESTJIAOTONGUNIVERSITY,58,MATLAB程序设计,控制程序流的其它常用指令pause使程序运行暂停指令,等待用户按任意键继续pause(n)使程序暂停n秒后继续执行pauseon指令允许连续的pause指令暂停程序的执行pauseoff指令使连续的pause或者pause(n)指令变得无效forn=3:22mesh(magic(n)pauseend,.SOUTHWESTJIAOTONGUNIVERSITY,59,MATLAB程序设计,控制程序流的其它常用指令return结束return指令所在函数的执行,返回到主调函数或指令窗口去,.SOUTHWESTJIAOTONGUNIVERSITY,60,MATLAB程序设计,控制程序流的其它常用指令error显示出错信息,终止程序error(message)error(message,a1,a2)error(message_id,message)error(message,message,a1,a2),.SOUTHWESTJIAOTONGUNIVERSITY,61,MATLAB程序设计,控制程序流的其它常用指令echo通常执行M文件时,文件的指令不会显示在指令窗口中,用echo指令可以使文件指令在执行可见,对程序调试和演示极为有用echoon显示echooff不显示echo两者之间切换,.SOUTHWESTJIAOTONGUNIVERSITY,62,MATLAB程序设计,控制程序流的其它常用指令echofcnnameon使fcnname指定文件指令在执行过程中显示出来echofcnnameoff终止显示fcnname文件的执行过程echofcnname对指定fcnname文件状态切换echoonall显示其后的所有文件的执行过程echooffall使其后所有被执行文件的过程不被显示,.SOUTHWESTJIAOTONGUNIVERSITY,63,MATLAB程序设计,函数调用和变量传递MATLAB中函数的调用方法与其他编程语言相类似,函数的调用有命令行和M文件两种调用方式调用函数时一定注意注明参数,输入参数写在括号里面,输出参数写在方括号内当在命令行或者其他M文件中首次调用一个M文件时,MATLAB会对该M文件进行解析,并把生成点相应点内部伪代码即P码文件存在内存中,如果再次需要调用此M文件,则直接调用内存中的P码文件,.SOUTHWESTJIAOTONGUNIVERSITY,64,MATLAB程序设计,函数调用和变量传递MATLAB在函数调用时,函数所传递点参数具有可调性,一个函

温馨提示

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

最新文档

评论

0/150

提交评论