MatLab的函数句柄

函数句柄(function_handle)

定义

官方定义:

函数句柄是一种表示函数的 MATLAB® 数据类型。函数句柄的典型用法是将函数传递给另一个函数。例如,您可以将函数句柄用作基于某个值范围计算数学表达式的函数的输入参数。函数句柄的其他典型用法包括:

  • 指定回调函数(例如,响应 UI 事件或与数据采集硬件交互的回调)。

  • 构造以内联方式定义而非存储在程序文件(匿名函数)中的函数的句柄。

我的理解:

相当于C语言中的指针,给函数取了个别名,相当于原函数来使用。

帮助:isa(h,\'function_handle\') 来查看变量 h 是否为函数句柄。

创建函数句柄

通过在函数名称前添加一个 @ 符号来为函数创建句柄。例如,如果您有一个名为 myfunction 的函数,请按如下所示创建一个名为 f 的句柄:

f=@myfunction;

此时,相当于给myfunction取了个别名叫f。

调用该函数就有两种方法:

1.f(x) 2.myfunction(x)

注:参数列表根据具体的函数而定,不仅仅只是例子中的x

函数句柄是您可传递给其他函数的变量。例如,计算 x2 在区间 [0,1] 上的积分。

q=integral(f,0,1);

函数句柄会存储其绝对路径,因此如果您有有效句柄,则可以从任意位置调用该函数。您不必在创建句柄时指定函数路径,只需指定函数名。

匿名函数

您可以创建指向匿名函数的句柄。匿名函数是基于单行表达式的 MATLAB 函数,不需要程序文件。构造指向匿名函数的句柄,方法是定义 anonymous_function 函数主体,以及指向匿名函数 arglist 的以逗号分隔的输入参数列表。语法为:

h=@(arglist)anonymous_function

语法:@(参数列表)单行表达式

例子:

定义匿名函数sqr

sqr=@(x)x.^2;

等价于:函数文件

function myfun=sqr(x);

myfun=x.^2;

将一个函数传递到另一个函数

您可以使用函数句柄作为其他函数(称为复合函数)的输入参数。这些函数基于某个范围内的值计算数学表达式。典型的复合函数包括 integralquad2dfzerofminbnd

如要计算sin函数的积分:

q2 = integral(@sin,a,b)

函数句柄的好处

1.提高运行速度。因为matlab对函数的调用每次都是要搜索所有的路径,从set path中我们可以看到,路径是非常的多的,所以如果一个函数在你的程序中需要经常用到的话,使用函数句柄,对你的速度会有提高的。

2.使用可以与变量一样方便。比如说,我再这个目录运行后,创建了本目录的一个函数句柄,当我转到其他的目录下的时候,创建的函数句柄还是可以直接调用的,而不需要把那个函数文件拷贝过来。因为你创建的function handles中,已经包含了路径。

本文参考:

MatLab中函数句柄@的作用及介绍

MATLAB的函数句柄的使用方法

MatLab帮助文档函数句柄