欢迎来到天天文库
浏览记录
ID:41956817
大小:60.55 KB
页数:6页
时间:2019-09-05
《函数句柄和匿名函数》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、下面代码创建一个内联函数i1_humps:»订_humps=inline('1./((x・3).A2+0.01)+1./((x・.9).A2+0.04)・6Tx‘)i1_humps=Inlinefunction:i1_humps(x)=1./((x-3).A2+0.01)+1./((x-.9).A2+0.04)-6上例中,函数inline从一个字符串创建一个函数,并以x为输入变量。要在一个函数屮调用内联函数,只要将该内联函数的名字作为输入参数传递给函数即可。例如,耍将quad(Fun,low,h
2、igh)中的Fun换为上面的内联韩式i1_humps,只要按下面的方式调用即叭quad(i1_humps,low,high)o要验证一个山字符串表示的函数或一个内联函数,可以使用feval函数。下而的代码验证了正弦函数和前面创建的i1_humps函数»y=fevalCsin',pi*(0:4)/4)y=00.70711.00000.70710.0000»z=feval(i1_humps,[1-01])-5.13785.176516除了字符串函数和内联函数外,还山一种函数类型:匿名函数,并用函数句
3、柄表示它。在应用中并不鼓励用户使用前两种方法,而是耍尽量使用匿名韩式句柄来引用函数。卜•面代码给出了一个匿名函数的例了:af_humps=@(x)1./((x-3).A2+0.01)+1./((x-.9).A2+0.04)-6;其中,@符号意味这等号左边是一个函数句柄。@后面的(x)定义了函数的输入参数,最后一部分是函数表达式。我们同样可以利用feval函数來验证匿名函数,例如,可以使用下而代码验证af_humps:»z=feval(af_humps,[-101])-5.13785.176516
4、.0000其实,用八根本没有必要利用feval函数來验证匿名函数,因为匿名函数可以使用自己的函数句柄直接进行验证,例如,上面的例子可以简写为:»z=af_humps([-101])-5.13785.176516.0000匿名函数在定义过程中口J以调用任何Matlab函数(包括用户自定义的函数),也口J以使用当时MatlabI作区屮存在的任何变量。例如,下例屮的匿名函数af_humpsab在定义时就是用了Matlab工作区中的变量a和b:»a=-.3;b=-.9;»af_humpsab=@(x)1
5、./((x+a).A2+0.01)+1./((x+b).A2+0.04)-6;»af_humpsab([-101])ans=-5.13785.176516.0000我们看到:af_humpsab在定义时引用了签名定义的变量a和b°应当注意,当a或b的值变化吋,匿名函数并不改变,这是因为函数句柄值捕捉它创建时刻的变虽的值,并不随变量的变化而变化。»a=0;%changingthevalueofadoesnotchangthefunction.»af_humpsab([-101])%evaluate
6、again,getthesameresultsans=-5.13785.176516.0000我们也可以针对一个内置函数或一个M文件函数创建匿名函数旬柄。下面函数分别给予M文件两数humps和Matlab内置两数cos创建了两个文件句柄:»fh_Mfile=@humps%functionhandleforM-filefunctionfh_Mfile=@humps»fh_Mfile(1)%evaluatehumps(1)ans=16»fh_builtin=@cosfh_builtin=@cos»f
7、h_builtin(pi)ans=-1由上面可知,要创建一个内置函数或一个M文件函数的句柄也很容易,只要在等号右边使川@符号,并在该符号后紧跟内置函数名或M文件函数名即可。我们述可以利用单元数组同时创建多个内置函数和M文件函数的句柄,验证这些函数时,只要引用该函数所在单元即可。例如,下面的代码将上面两个独立独立创建的句柄利用一个单元数组than创建在一起:»than={@humps@cos}than=@humps@cos»fhan{1}(1)%evaluatehumps(1)ans=16»fha
8、n{2}(pi)%evaluatecos(pi)ans=-1Matlab还&门提供了一些函数来处理和应用句柄。例如,函数functions将返冋一个句柄的详细信息,如下例所示:»functions(fh_Mfile)ans=function:'humps1type:'simple'file:‘D:anzhuangnjanjianMATLABR2008atoolboxmatlabdemoshumps.rrr»functions(fh_builtin)ans=function:"cos
此文档下载收益归作者所有