可以为命名函数和匿名函数创建函数句柄。您可以将多个函数句柄存储在一个数组中,并像保存和加载任何其他变量一样保存和加载它们。
函数句柄是一个MATLAB®存储函数关联的数据类型。通过间接调用函数,无论从何处调用函数,都可以调用该函数。函数句柄的典型用途包括:
将一个函数传递给另一个函数(经常调用)功能)。例如,将函数传递给集成和优化函数,例如完整的
和fzero
.
指定回调函数(例如,响应UI事件或与数据获取硬件交互的回调)。
为内联定义的函数构造句柄,而不是存储在程序文件中(匿名函数)。
从主函数外部调用局部函数。
你可以看到如果一个变量,H
,是使用伊萨
(h,“功能手柄”)
.
要为函数创建句柄,请在函数名称前面加上@
签名。例如,如果您有一个调用我的功能
,创建一个名为F
如下:
f=@myfunction;
使用句柄调用函数的方式与直接调用函数的方式相同计算机正方形
,定义为:
函数y=computeSquare(x)y=x.^2;终止
创建一个句柄并调用函数来计算四的平方。
f=@computeSquare;a=4;b=f(a)
b=16
如果函数不需要任何输入,则可以使用空括号调用函数,例如
h=@one;a=h()
一个= 1
如果没有括号,赋值将创建另一个函数句柄。
a=h
一个= @ones
函数句柄是可以传递给其他函数的变量。例如,计算的积分x2.关于范围[0,1]。
q=积分(f,0,1);
函数句柄存储其绝对路径,因此当您拥有有效句柄时,您可以从任何位置调用函数。创建句柄时不必指定函数的路径,只需指定函数名。
创建函数句柄时,请记住以下几点:
名称长度-函数名的每个部分(包括包和类名)必须小于namelengthmax
. 否则,MATLAB将截断名称的后一部分。
范围-创建句柄时,函数必须在范围内。因此,函数必须位于MATLAB路径或当前文件夹中。或者,对于本地或嵌套函数的句柄,函数必须位于当前文件中。
优先级——当有多个同名函数时,MATLAB使用与调用函数相同的优先级规则来定义函数句柄。有关详细信息,请参阅函数优先顺序.
重载——当一个函数句柄被一个或多个参数调用时,MATLAB确定主要参数。如果主导参数是一个对象,MATLAB会确定对象的类是否有一个方法重载与函数句柄的关联函数相同的名称。如果是,则调用对象的方法,而不是关联的函数。
您可以创建匿名函数的句柄。匿名函数是基于一行表达式的MATLAB函数,不需要程序文件。通过定义函数体来构造匿名函数的句柄,匿名函数
,以及以逗号分隔的匿名函数输入参数列表,参数列表
. 语法是:
h=@(参数列表)匿名函数
例如,创建一个句柄,sqr
,到一个匿名函数,该函数计算一个数字的平方,并使用它的句柄调用匿名函数。
SQR = @(n) n.²;x = sqr (3)
x = 9
有关详细信息,请参阅匿名函数.
通过将函数句柄收集到单元格或结构数组中,可以创建函数句柄数组。例如,使用单元格数组:
C={@sin,@cos,@tan};C{2}(pi)
ans=-1
或使用结构数组:
S.a=@sin;S.b=@cos;S.c=@tan;S.a(pi/2)
ans=1
可以在MATLAB中保存和加载函数句柄,就像保存和加载任何其他变量一样拯救
和负载
函数。如果保存函数句柄,MATLAB不会保存路径信息。如果加载函数句柄,且函数文件不再存在于路径上,则句柄无效。如果创建句柄后文件位置或文件名发生更改,则会出现无效句柄。如果句柄无效,MATLAB可能会显示警告加载文件时,当调用无效句柄时,MATLAB会发出错误。