MATLAB第十二讲.ppt
《MATLAB第十二讲.ppt》由会员分享,可在线阅读,更多相关《MATLAB第十二讲.ppt(71页珍藏版)》请在三一办公上搜索。
1、MATLAB程序设计,MATLAB数据处理与应用2011-2012学年选修课,第十二讲,王文健,Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY,2,主要内容,M脚本文件和函数文件MATLAB控制流函数调用和变量传递M文件调试方法文件I/O函数,Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY,3,MATLAB程序设计,简介MATLAB除了指令行操作的直接交互外,作为一种高级应用软件还提供了自己的编程语言通过编写MATLAB程序,可以更加方便地调用MTALAB
2、提供的各种功能强大的函数库,使得程序能完成复杂的运算,处理大量的数值数据MATLAB程序设计语言属于第四代编程语言,编程方式简单、编程效率高、容易维护,Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY,4,MATLAB程序设计,简介脚本文件和函数文件是通过MATLAB程序代码构建的,是MATLAB实现运算功能的基础MATLAB提供的控制流则是控制程序流执行次序的手段文件I/O函数则是MATLAB与外界进行数据交换的重要方式M文件调试是程序设计的必备环节,Tribology Research Institute SOUTHWES
3、T JIAOTONG UNIVERSITY,5,MATLAB程序设计,M文件简介MATLAB提供了丰富的编程语言,使得用户可以将一连串的命令写入文件,然后使用简单的函数来执行这些命令,文件被保存成文本文件,后缀为.MM文件是一个文本文件,可以使用各种文本文件对它进行修改,也可以使用MATLAB内建的M文件编辑器,还可以在MATLAB的命令窗口直接键入edit命令对文件进行编辑 edit或者edit wwj.Medit表示编辑新的M文件,edit wwj.M是编辑已有的M文件,后缀可省略,Tribology Research Institute SOUTHWEST JIAOTONG UNIVER
4、SITY,6,MATLAB程序设计,M文件分类脚本Scripts,它包含了MATLAB的各种命令函数Functions,它可以接受输入变量,并将运算结果送至输出变量MATLAB脚本经常用于一连串费时的命令没有输入和输出参数产生的变量放在MATLAB的基本工作空间,与其他脚本及MATLAB的命令行接口共享,Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY,7,MATLAB程序设计,M文件分类MATLAB函数在扩充MATLAB函数库时使用可以接收参数,也可以返回参数运算中所产生的变量都存放在函数本身的工作空间中,Tribology
5、 Research Institute SOUTHWEST JIAOTONG UNIVERSITY,8,MATLAB程序设计,M文件的基本结构基本成分如下:function f=fact(n)函数定义行%Compute a factorial value.%FACT(N)returns the factorial of N,注释%usually denoted by N!帮助文档f=prod(1:n);函数体,Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY,9,MATLAB程序设计,M文件的基本结构M文件的组成元素函数定义行
6、定义函数名、输入输出参数的数量及顺序H1行对程序的总体介绍,但使用help或lookfor命令时会显示这些信息函数说明对程序的详细描述,当对函数使用help命令时与H1行一起显示函数或者脚本主体运行计算,产生输出的程序代码注释在程序中解释程序功能的文字,Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY,10,MATLAB程序设计,M脚本文件因为没有输入和输出,脚本是最简单的M文件,它可以自动运行一系列的MATLAB指令如果在命令行中要重复进行某些计算,就可以使用脚本脚本与MATLAB会话共享基本工作空间,他们主要是操作工作空间
7、中的数据,可以在工作空间中产生新的数据脚本运行完毕之后,产生的所有变量都会保存在工作空间总,可以运用这些数据进行下一步的运算,Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY,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;for k=1:4polar(theta,rho(k,:)
8、pauseend,Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY,12,MATLAB程序设计,Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY,13,MATLAB程序设计,M脚本文件脚本创建了MATLAB工作空间所需的变量,在程序执行完毕后,变量仍然保存在工作空间中,如程序中的theta和rho,可使用whos命令进行查看列表,Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY,14,MATL
9、AB程序设计,M函数文件M函数文件与M脚本文件不同,M函数文件通常在扩充MATLAB函数库时使用,可以接收参数,也可以返回参数,M函数将运算中产生的变量都存放在函数本身的工作空间中M函数文件对于用户来说是不透明的,外界只能看到其输入和输出当M函数文件运行时,MATLAB就会建立单独的临时工作空间,称为函数工作空间运算过程中产生的变量都存放在函数的工作空间中,并不会与MATLAB的基本工作空间中的变量相互覆盖,Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY,15,MATLAB程序设计,M函数文件举例function y=ave
10、rage(x)%m,n=size(x)if(m=1)|(n=1)|(m=1&n=1)error(Input must be a vector)endy=sum(x)/length(x)%计算,Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY,16,MATLAB程序设计,M函数的类型匿名函数主函数与子函数私有函数嵌套函数,Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY,17,MATLAB程序设计,匿名函数匿名函数它是MATLAB函数的一种简单形式,不要求有M文
11、件,只包含一个MATLAB表达式、任意多个输入和输出用户可以在MATLAB命令窗口或者M函数文件或是脚本文件中定义它语法:ff=(arglist)expression其中expression为匿名函数的函数体,arglist为匿名函数的输入参数列表,Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY,18,MATLAB程序设计,匿名函数等号右边必须以符号开始,此符号在MATLAB中用来构造函数句柄,函数句柄被创建以后,此匿名函数就可以调用匿名函数句柄的创建 sqr=(x)x.2;quad(sqr,0,1)因为sqr是一个函数句柄
12、,可以将其作为参数传递给别的函数,Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY,19,MATLAB程序设计,匿名函数匿名函数中还可以携带多个输入参数sumAxBy=(x,y)(3*x+4*y);sumAxBy(5,7)如果匿名函数中不包含任何的输入参数,后边的参数列表必须用空的括号表示t=()datestr(now);调用此函数时同样使用括号t(),否则不会调用此函数,Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY,20,MATLAB程序设计,主函数与子
13、函数MATLAB允许一个M函数文件包含多个函数的代码,其中第一个出现的函数称为主函数,其他的函数称为子函数保存时所用的函数文件名与主函数定义名相同MATLAB中所有非匿名函数都需要在M文件中定义每个M文件都要求有一个主函数,它最先出现在该M文件中,主函数范围比子函数要广,主函数可以在M文件外部调用,子函数则不行,Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY,21,MATLAB程序设计,主函数与子函数同一个M文件中的主函数很子函数的工作空间是彼此独立的各函数间的信息可以通过输入输出变量、全局变量或跨空间指令进行传递子函数中的
14、第一行是其函数声明行,而且多个子函数的排列次序可以任意改变M函数文件中,任何指令通过名字对函数进行调用时,子函数的优先级仅次于内装函数,Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY,22,MATLAB程序设计,主函数与子函数举例:求均值和中值u=1:99;avg,med=newstats(u)如果想得到子函数的相关帮助信息,可以使用help命令,如:要获得M文件的myfun.m中的子函数mysubfun的帮助信息,可输入:help myfun/mysubfun,Tribology Research Institute SO
15、UTHWEST JIAOTONG UNIVERSITY,23,MATLAB程序设计,私有函数它唯一特征是只能够在一个特定的限定函数群中可见私有函数放在以private命名的子目录下,它们只对父目录中的函数是可见的由于私有函数是对外部不可见的,因此它们可以采用与其他目录下函数相同的名字可以使用help命令获得私有函数的帮助信息,如help private/muyprivfun,Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY,24,MATLAB程序设计,嵌套函数可以在任意一个MATLAB函数体内部定义函数,它们称为外部函数的嵌套
16、函数嵌套函数跟其它M文件函数一样,包含M文件的基本元素,当嵌套函数结束时必须用end表示结束还可以进行多重嵌套,Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY,25,MATLAB程序设计,嵌套函数function x=nestFun(p1,p2)x1=nestFun(p2);function y=nestFunIn(p3)y=2*p3;end x=x1+p1;end,Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY,26,MATLAB程序设计,嵌套函数fun
17、ction A(x,y)B(x,y);D(y);function B(x,y)C(x);D(y);function C(x)D(x);end endend,Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY,27,MATLAB程序设计,嵌套函数一个函数可以调用自己函数体中的嵌套函数,如A可以调用B和D,但不能调用C,同一级的嵌套函数也可以相互调用,如B和D,可以调用比自己低一级的嵌套函数,如C可以调用D嵌套函数有自己的工作空间,但它的权限访问其所嵌套地方的所有函数的工作空间,因此,被主函数赋值的变量可以被主函数中任意一个嵌套函数
18、访问一个嵌套函数的变量值可以被任何包含它的函数访问,Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY,28,MATLAB程序设计,嵌套函数创建函数句柄function h=getcubehandleh=findcube;function cube=findcube(x)cube=x.3;endend,Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY,29,MATLAB程序设计,嵌套函数创建函数句柄cubeit=getcubehandlecubeit(8)函数g
19、etcubehandle获得嵌套函数findcube的句柄之后,将之返回给输出变量cubeit可以在M函数的外部调用访问嵌套函数findcube,Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY,30,MATLAB程序设计,嵌套函数绘制抛物线实例函数makeparabola创建一个嵌套函数的函数句柄,然后将其传递给MATLAB的fplot函数,画出抛物线function fhandle=makeparabola(a,b,c)fhandle=parabola;function y=parabola(x);y=a*x.2+b*x+
20、c;endend,Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY,31,MATLAB程序设计,嵌套函数调用函数makeparabola,将句柄返回给变量h,求输入参数为0和25时的值h=makeparabola(1.3,0.2,30)h(0)h(25)fplot(h,-25,25),Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY,32,MATLAB程序设计,Tribology Research Institute SOUTHWEST JIAOTONG UN
21、IVERSITY,33,MATLAB程序设计,局部变量和全局变量每个函数都有自己的局部变量,他们与基本工作空间中的变量是相互独立的,而且不同函数的局部变量是独立的,只能在函数内部使用如果两个或多个函数想公用同一个变量,那么就可以用global将它声明成全局变量global variables全局变量的使用可以减少参数的传递,如果合理利用全局变量,将可以提高程序的执行效率,Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY,34,MATLAB程序设计,局部变量和全局变量如果要查看工作空间的全局变量,则输入whos global,可
22、显示出全局变量global manxlen maxwidmaxlen=36;maxwid=78;len=5;wid=21;whos global,Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY,35,MATLAB程序设计,MATLAB控制流所有的计算机编程语言都提供了控制程序流执行程序的语法MATLAB提供了四种控制程序流的结构for、while循环结构if-else-end循环结构switch-case循环结构try-catch循环结构,Tribology Research Institute SOUTHWEST JIAO
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 第十二
链接地址:https://www.31ppt.com/p-5439264.html