首页 > 编程笔记 > MATLAB笔记 阅读:42

MATLAB函数句柄的创建和使用(非常详细)

在 MATLAB 中,对函数的调用方法分为直接调用法和间接调用法。

对于直接调用法,被调用的函数通常被称为子函数。但是子函数只能被与其 M 文件同名的主函数或 M 文件中的其他函数调用,一个文件中只能有一个主函数。

使用函数句柄对函数进行调用可以避免上述问题。函数句柄提供了一种间接调用函数的方法。创建函数句柄需要用到操作符 @。

MATLAB 函数库提供的各种 M 文件中的函数和使用者自主编写的程序的内部函数,都可以被创建函数句柄,从而可以通过函数句柄来实现对这些函数的间接调用。

创建函数句柄的一般语法形式如下:
Function_Handle = @Function_Filename;
其中各参数的含义如下:
例如,F_Handle=@cos 就创建了 MATLAB 内部函数 cos 的句柄,并将其保存在 F_Handle 变量中,在后续的运算过程中可以通过 F_Handle(x) 来实现 cos(x) 的功能。

在通过函数句柄调用函数时,也需要指定函数的输入参数。例如,可以通过 F_Handle(arg1, arg2, …, argn) 这样的调用格式来调用具有多个输入参数的函数。

对于那些没有输入参数的函数,在使用函数句柄调用时,在函数句柄变量之后的圆括号中不填写变量名即可,即 F_Handle()。

【实例】函数句柄的创建与调用。在命令行窗口中输入以下语句,并显示相应的输出结果。
>> F_Handle = @cos
F_Handle =
    包含以下值的 function_handle:
    @cos

>> x = 0 : 0.25 * pi : 2 * pi;
>> F_Handle( x )  % 通过函数句柄调用函数
ans =
    1.0000    0.7071    0.0000   -0.7071   -1.0000   -0.7071    0.0000    0.7071    1.0000
MATLAB 库函数中提供了大量关于函数句柄的操作函数,将函数句柄的功能与其他数据类型联系起来,扩展了函数句柄的应用。

函数句柄的简单操作函数如下表所示:

表:函数句柄的简单操作函数
函数名称 函数功能
s=functions(fh) 返回一个结构体 s,存储函数的名称、类型(simple 或 overloaded),以及函数 M 文件的位置
c=func2str(fh) 将函数句柄 fh 转换为函数名称字符串
fh=str2func(str) 将字符串 str 代表的函数转换为函数句柄
save (fname.mat, fh) 将函数句柄 fh 保存在 *.mat 文件中
load (fname.mat, fh) 把 *.mat 文件中存储的函数句柄 fh 加载到工作区中
isa(var, 'function_handle') 检测变量 var 是否是函数句柄
isequal(fhA, fhB) 检测两个函数句柄 fhA、fhB 是否对应同一个函数

【实例】函数句柄的基本操作。在命令行窗口中输入以下语句,并显示相应的输出结果。
>> F_Handlea = @exp
F_Handlea =
    包含以下值的 function_handle:
    @exp

>> F_Handleb = @log
F_Handleb =
    包含以下值的 function_handle:
    @log

>> functions(F_Handlea)
ans =
    包含以下字段的 struct:
    function: 'exp'
    type: 'simple'
    file: ''

继续在命令行窗口中输入:
>> isa(F_Handlea, 'function_handle')  % 判断 F_Handlea 是否是函数句柄
ans =
    logical
    1

>> isequal(F_Handlea, F_Handleb)  % 判断两个函数句柄是否对应同一个函数
ans =
    logical
    0

相关文章