当前位置:文档之家› 函数句柄和匿名函数

函数句柄和匿名函数

函数句柄和匿名函数
内联函数inline
下面代码创建一个内联函数f:
>> f = inline('1./((x-3).^2+0.01)+1./((x-.9).^2+0.04)-6','x')
f(x) = 1./((x-3).^2+0.01)+1./((x-.9).^2+0.04)-6
上例中,函数inline从一个字符串创建一个函数,并以x为输入变量。

要在一个函数中调用内联函数,只要将该内联函数的名字作为输入参数传递给函数即可。

例如,要将quad(Fun,low,high)中的Fun 换为上面的内联韩式f,只要按下面的方式调用即可:
quad(f,low,high)。

要验证一个由字符串表示的函数或一个内联函数,可以使用feval函数。

下面的代码验证了正弦函数和前面创建的f函数
>> y = feval('sin',pi*(0:4)/4)
y =
0 0.7071 1.0000 0.7071 0.0000
>> z = feval(f,[1- 0 1])
z=
-5.1378 5.1765 16
匿名函数
除了字符串函数和内联函数外,还由一种函数类型:匿名函数,并用函数句柄表示它。

在应用中并不鼓励用户使用前两种方法,而是要尽量使用匿名韩式句柄来引用函数。

下面代码给出了一个匿名函数的例子:
f = @ (x) 1./((x-3).^2+0.01)+1./((x-.9).^2+0.04)-6;
其中,@符号意味这等号左边是一个函数句柄。

@后面的(x)定义了函数的输入参数,最后一部分是函数表达式。

我们同样可以利用feval 函数来验证匿名函数,例如,可以使用下面代码验证af_humps:>> z = feval(af_humps,[-1 0 1])
z =
-5.1378 5.1765 16.0000
其实,用户根本没有必要利用feval函数来验证匿名函数,因为匿名函数可以使用自己的函数句柄直接进行验证,例如,上面的例子可以简写为:
>> z = f([-1 0 1])
z =
-5.1378 5.1765 16.0000
匿名函数在定义过程中可以调用任何Matlab函数(包括用户自定义
的函数),也可以使用当时Matlab工作区中存在的任何变量。

例如,下例中的匿名函数af_humpsab在定义时就是用了Matlab工作区中的变量a和b:
>> a = -.3;b=-.9;
>> af_humpsab = @ (x) 1./((x+a).^2+0.01)+1./((x+b).^2+0.04)-6; >> af_humpsab([-1 0 1])
ans =
-5.1378 5.1765 16.0000
我们看到:af_humpsab在定义时引用了签名定义的变量a和b。

应当注意,当a或b的值变化时,匿名函数并不改变,这是因为函数句柄值捕捉它创建时刻的变量的值,并不随变量的变化而变化。

>> a = 0; %changing the value of a does not chang the function. >> af_humpsab([-1 0 1]) %evaluate again , get the same results
ans =
-5.1378 5.1765 16.0000
针对一个内置函数或一个M文件函数创建匿名函数句柄
下面函数分别给予M文件函数humps和Matlab内置函数cos创建了两个文件句柄:
>> fh_Mfile = @humps
>> fh_builtin = @cos
由上面可知,要创建一个内置函数或一个M文件函数的句柄也很容易,只要在等号右边使用@符号,并在该符号后紧跟内置函数名或M文件函数名即可。

相关主题