matlab-函数句柄.ppt_第1页
matlab-函数句柄.ppt_第2页
matlab-函数句柄.ppt_第3页
matlab-函数句柄.ppt_第4页
matlab-函数句柄.ppt_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

函数句柄,主要内容,函数类型(MATLAB),函数句柄介绍,函数句柄举例,1,3,2,一.函数类型介绍,MATLAB函数的类型有主函数、子函数、嵌套函数、私用函数和匿名函数等主函数任意m文件中的第一个函数称呼为主函数。主函数之后可能附随多个子函数。主函数是在命令区或其它函数中可调用的唯一一个该m文件中所定义的函数。,子函数一个m文件中可能包含多个函数。主函数之外的函数都称为子函数这些子函数只能为主函数或同一m文件中的其它子函数可见。而即便在相同m文件中,子函数内定义的变量也不可为其它子函数所使用除非定义为全局或作为参数传递。,举例(求2*x2+3*x-7=0的根),functionx,y=equal(a,b,c)%主函数d=b.2-4*a*c;%子函数x=(-b+sqrt(d)./(2*a);y=(-b-sqrt(d)./(2*a);r1r2=equal(2,3,-7)r1=1.2656r2=-2.7656,嵌套函数任一m函数体内所定义的函数称为外部函数的嵌套函数。matlab支持多重嵌套函数即在嵌套函数内部继续定义下一层的嵌套函数。,例:,functionx=nestFun(p1,p2)X1=nestFun(p2);functiony=nestFunIn(p3)%嵌套函数y=2*p3;endx=x1+p1;end,Matlab函数体通常不需end结束标记,但如包含嵌套函数,则该m文件内的所有函数(主函数和子函数)不论是否包含嵌套函数都需显式end标记。嵌套函数的调用规则1.父级函数可调用下一层嵌套函数。2.相同父级的同级嵌套函数可相互调用。3.处于低层的嵌套函数可调用任意父级函数。,私有函数私有函数仅对满足条件的特定函数开放。私有函数存放于名为private的子目录下,访问条件是存放于该private子目录的上一层父目录中的m文件函数从存放于该private子目录上一层父目录中的m文件函数中发起调用的m脚本。,内联函数(inline)函数是MATLAB7以前经常使用的一种构造函数对象的方法。在命令窗口、程序或函数中创建局部函数时,通过使用inline构造函数而不用将其储存为一个M文件,同时又可以像使用一般函数那样调用它。MATLAB中的内联函数借鉴了C语言中的内联函数,现在应用较少。,匿名函数匿名函数(anonymousfunction)是MATLAB7.0版提出的一种全新的函数描述形式和内联函数类似可以让用户编写简单的函数而不需要创建M文件。相当于C语言中的函数指针(入口地址)只不过句柄就用一个唯一的常整数来指出。匿名函数是函数句柄的一种特殊用法这里所得到的函数句柄变量不指向特定的函数即不指向函数M文件中的函数名而是指向一个函数表达式(具体表达式)。,定义一个匿名函数很简单语法是fhandle=(arglist)expression变量名=(输入参数列表)运算表达式其中fhandle就是调用该函数的函数句柄(functionhandle)相当于C语言中的函数指针arglist是参数列表,多个参数使用逗号分隔,Expression则是该函数的表达式,从这里我们引入函数句柄。,为了说明问题,我们用简单的两个数相加,sum=(x,y)x+ysum=(x,y)x+ysum(2,3)ans=5,在这里,(x,y)为输入参数列表,x+y为运算表达式。的作用就是将一个函数的函数句柄赋值给等号左边的变量。在调用函数时就可以调用该句柄,可以实现同样的功能。,句柄定义:matlab中,每一个对象都有一个数字来标示,叫做句柄。(可以理解为一个人的名字,这样在调用时可以调用函数句柄而不用调用该函数),二.函数句柄,方便地实现函数间互相调用兼容函数加载的所有方式拓宽子函数包括局部函数的使用范围提高函数调用的可靠性减少程序设计中的冗余提高重复执行的效率数组、结构数组、细胞型数组结合定义数据,函数句柄优点,函数句柄的一个重要的特性是将它们可以用来标识子函数、私有函数和嵌套函数。一般情况下,这些函数对于用户来说都是“隐蔽”的,这些标识对于用户正确使用这些函数非常有用。例如,当我们在编写一个含有子函数的M文件时,可以为子函数创建一个句柄,并作为主函数的一个输出参数提供给用户,这样就是本来“隐蔽”的子函数“显现”出来,以便于用户对其进行验证和使用。,函数句柄的创建和显示定义函数句柄的定义只需在提示符后添加相应函数的函数名f_h=plotf_h=plot函数句柄的内容通过functions显示functions(f_h)ans=function:plottype:simplefile:MATLABbuilt-infunction,函数句柄的调用和操作可通过函数feval进行函数句柄的调用feval(函数句柄)(间接调用格式)f_h1=peaks%peaks函数,可产生一个凹凸有致的曲面feval(f_h1)feval(函数句柄,参数列表)f_h=plotfeval(f_h,0:10,0:10),sum=(x,y)x.2+y.2sum=(x,y)x.2+y.2sum(2,3)ans=5直接调用格式,函数句柄与函数名字符串转换func2str函数名字符串转换函数句柄str2func函数句柄转换函数名字符串funh=str2func(det)ansfunh=detfunc2str(funh)ans=det,当我们将一个函数名作为字符串传递给函数str2func时,也可以创建该函数的函数句柄。func2str函数执行与str2func相反的操作,它从一个函数句柄中提取函数名,并保存戴一个字符串变量中。当函数句柄是一个内置函数或M文件函数句柄时,该函数返回函数的名称,当函数句柄是一个匿名函数句柄时,该函数返回匿名函数的函数表达式。,三.函数句柄举例,和匿名函数相关例如定义x和y的平方和函数f=(x,y)x*x+y*yf=(x,y)x*x+y*y例如计算f(3,4)f(3,4)ans=25,匿名函数可以使用工作空间的变量例如创建函数f(x,y)=x2+y3p=2;q=3;f=(x,y)xp+yqf=(x,y)xp+yq计算f(2,3)f(2,3)ans=31,如果修改p或者q的值例如将q改为2q=2f(2,3)ans=31计算结果并没有改变,这是因为该函数句柄保存的是函数在创建时的快照,而不是动态的访问其中的变量,如果希望获取新值。需要重新创建一次该函数,完整的方法应该是这样的:q=2;f=(x,y)xp+yqf=(x,y)xp+yqf(2,3)ans=13,由上面可知,要创建一个内置函数或一个M文件函数的句柄也很容易,只要在

温馨提示

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

评论

0/150

提交评论