zoukankan      html  css  js  c++  java
  • matlab学习笔记13_3创建函数句柄

    一起来学matlab-matlab学习笔记13函数

    13_3 创建函数句柄

    觉得有用的话,欢迎一起讨论相互学习~Follow Me

    参考文献
    https://ww2.mathworks.cn/help/matlab/matlab_prog/creating-a-function-handle.html

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

    什么是函数句柄

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

    1. 将一个函数传递到另一个函数(通常称为功能函数)。例如,将函数传递到 integral 和 fzero 等积分和优化函数。

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

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

    4. 从主函数外调用局部函数。

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

    创建函数句柄

    • 通过在函数名称前添加一个 @ 符号来为函数创建句柄。例如,如果有一个名为 myfunction 的函数,f = @myfunction; .
    • 使用句柄调用函数的方式和直接调用函数一样
    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
    
    • 函数句柄是可以传递给其他函数的变量,例如:q = integral(f,0,1);
    • 函数句柄会存储其绝对路径,因此有效句柄可以从任意位置调用该函数。不必在创建句柄时指定函数路径,只需指定函数名。

    注意

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

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

    • 优先级 - 当多个函数采用同一名称时,MATLAB 会使用与调用函数相同的优先级规则来定义函数句柄。

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

    匿名函数

    • 创建一个指向用于计算平方数的匿名函数的句柄 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 将引发错误。
  • 相关阅读:
    java模糊关键字查询
    Asp.Net MVC 扩展 Html.ImageFor 方法详解
    mvc下ajax请求遇到session超时简单处理方式
    8天学通MongoDB——第一天 基础入门
    MVC5中使用jQuery Post 二维数组和一维数组到Action
    构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(33)-数据验证共享
    构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(31)-MVC使用RDL报表
    构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(30)-本地化(多语言)
    JQuery文件上传插件ajaxFileUpload在Asp.net MVC中的使用
    MVC 5 + EF6 入门完整教程14 -- 动态生成面包屑导航
  • 原文地址:https://www.cnblogs.com/cloud-ken/p/11789254.html
Copyright © 2011-2022 走看看