目录

创建函数句柄

什么是函数句柄?

创建函数句柄

匿名函数

由函数句柄组成的数组

保存和加载函数句柄


创建函数句柄

可以为已命名函数和匿名函数创建函数句柄。可以将多个函数句柄存储在数组中,保存并加载它们,方法与对任何其他变量一样。

什么是函数句柄?

函数句柄是一种存储指向函数的关联关系的 MATLAB® 数据类型。间接调用函数使调用该函数时无需考虑调用位置。函数句柄的典型用法包括:

  • 将一个函数传递到另一个函数(通常称为复合函数)。例如,将函数传递到 integral 和 fzero 等积分和优化函数。

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

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

  • 从主函数外调用局部函数。

可以使用 isa(h,'function_handle') 来查看变量 h 是否为函数句柄。

创建函数句柄

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

f = @myfunction;

使用句柄调用函数的方式与直接调用函数一样。例如,假设有一个名为computeSquare的函数,该函数定义为:

function y = computeSquare(x)
y = x.^2;
end

创建句柄并调用该函数以计算 4 的平方。

f = @computeSquare;
a = 4;
b = f(a)
b =16

如果该函数不需要任何输入,则您可以使用空括号调用该函数,例如

h = @ones;
a = h()
a =1

如果不使用括号,则该赋值会创建另一个函数句柄。

a = h
a = @ones

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

q = integral(f,0,1);

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

创建函数句柄时应牢记以下几点:

  • 名称长度 - 函数名称(包括包名称和类名称)的每个部分都必须小于 namelengthmax 指定的数值。否则 MATLAB 会截断该名称的后面一部分。

  • 范围 - 在创建句柄时,该函数必须处于范围内。因此,该函数必须在 MATLAB 路径上或位于当前文件夹中。或者,对于局部或嵌套函数句柄,这些函数必须位于当前文件中。

  • ​优先级 - 当多个函数采用同一名称时,MATLAB 会使用与调用函数相同的优先级规则来定义函数句柄。有关详细信息,可以参考函数优先顺序

  • 重载 - 如果指定的函数在非基础 MATLAB 类的类中重载函数,那么在构造该函数的句柄时,函数不会与该函数句柄关联。相反,MATLAB 会考虑输入参数并在计算时确定要调用的实现。

匿名函数

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

h = @(arglist)anonymous_function

例如,创建一个指向用于计算平方数的匿名函数的句柄 sqr,并使用其句柄调用该匿名函数。

sqr = @(n) n.^2;
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 中保存和加载函数句柄,就像处理任何其他变量一样。换言之,使用 save 和 load 函数。如果保存函数句柄,则 MATLAB 不会保存路径信息。如果加载函数句柄,并且函数文件不再位于该路径上,则该句柄无效。如果文件位置或文件名在创建句柄后进行了更改,则该句柄将变得无效。如果句柄无效,MATLAB 可能会在加载文件时显示警告。当调用无效句柄时,MATLAB 将引发错误。

Matlab中创建函数句柄相关推荐

  1. MATLAB中的函数句柄及其应用

    1.函数句柄的创建 函数句柄(function handle)是MATLAB中的一类特殊的数据结构,它的地位类似于其它计算机语言里的函数对象(Javascript,Python),函数指针(C++), ...

  2. MATLAB中的函数句柄 理解

    MATLAB中的函数句柄 理解 https://zhuanlan.zhihu.com/p/266263265 https://blog.csdn.net/kevinhg/article/details ...

  3. matlab inline feval,matlab中关于函数句柄、feval函数以及inline函数的解析

    MATLAB函数句柄 函数句柄(Function handle)是MATLAB的一种数据类型. 包含了函数的路径.函数名.类型以及可能存在的重载方法: 引入函数句柄是为了使feval及借助于它的泛函指 ...

  4. matlab获取当前打开软件的句柄,MATLAB中的函数句柄及其应用

    1.的创建 函数句柄( % 函数句柄的创建 % 方式1 : 直接加@ % 语法:@函数名 fun1 = @sin; % 方式2 : str2func函数 % 语法:str2fun('函数名') fun ...

  5. Matlab中的函数句柄@

    本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50699990 @是Matlab中的句柄 ...

  6. 在MATLAB中创建函数

    在MATLAB中,其自带了众多函数,但有时候却没有适合自己的那一款.此刻,你需要创建一个属于自己的函数,来满足特殊的功能.正文如下: 函数创建格式 function [y1,-,yN] = myfun ...

  7. Matlab中的函数句柄@的基本用法

    @是Matlab中的句柄函数的标志符,即间接的函数调用方法. 句柄函数 主要有两种语法: handle = @functionname handle = @(arglist)anonymous_fun ...

  8. matlab学习笔记13_3创建函数句柄

    一起来学matlab-matlab学习笔记13函数 13_3 创建函数句柄 觉得有用的话,欢迎一起讨论相互学习~ 参考文献 https://ww2.mathworks.cn/help/matlab/m ...

  9. 浅谈matlab数学建模中@符号-----函数句柄

    很多刚开始学数学建模的小伙伴第一次在matlab程序中遇到"@"这个符号都不知道是什么意思, 如: f = @myfunction: 或者 fun = @sin; 其实这种用法叫创 ...

最新文章

  1. Kafka那些值得我们学习的优秀设计
  2. 不会MySQL索引,面试官让回家等通知!
  3. es6在原生代码的用法_关于ES6的模块化
  4. layer 弹出框的使用
  5. AndroidStudio直接通过gradle无mk编译生成so
  6. Tomcat内存溢出(java.lang.OutOfMemoryError: PermGen space)的解决办法
  7. tebluea 仪表板如何联动_报告厅音响设备和辅助设备.doc
  8. JAVAEE框架之Spring AOP
  9. discuz!5.5.0安装方法及常见问题解决
  10. 21世纪的设计模式:抽象工厂模式
  11. SpringBoot配置图片虚拟映射
  12. Centos yum install和yum groupinstall的区别
  13. 初试cocos2d-x坐标系
  14. day42-mysql索引
  15. 12、Linux一级子目录学习
  16. 10562:Undraw the Trees
  17. springboot框架搭建
  18. Java 最常见的 200+ 面试题:面试必备 1
  19. java断言与断点_断言 - 游戏蛮牛 - Unreal中文翻译用户手册
  20. java xml 大文件怎么打开_JAVA xml 流方式读取。数据挖掘大文件预处理。

热门文章

  1. Kbps、KBps的含义与换算
  2. 终于理解了RNN里面的time_step
  3. SEDA性能优化的分析和模拟
  4. 艺考生文化课分数线丨各个省份去年的艺考生文化分数线最低分是多少?
  5. 【头歌】HBase综合测试
  6. 质量检查工程师应避免的7个不良习惯
  7. JavaScript fixed() 方法
  8. tinymce引入后未显示_tinyMCE使用方法与心得详解
  9. Vue 安装 Element Plus
  10. 个人实战经验:数据建模 “账户数据是属于维度还是账户域 ”