关于函数句柄(@)的相关内容

函数句柄/function_handle(@)

  句柄是一种间接调用函数的方式

 

语法

   handle=@functionname

   handle=@(arglist)anonymous_function

 

 

描述

   函数句柄(function handle)是一种能够提供函数间接调用的matlab value。你可以通过传递句柄来调用各种其他功能。你也可以将句柄存储到数据结构中备用(例如Handle Graphic 回调)。句柄是matlab的标准数据类型之一

 

   当创建句柄时,你所指定的函数必须在matlab搜索路径之中,并且必须在创建语句的scope之中。例如,只要在定义子函数的文件之中,你句可以为这个子函数创建句柄。这些条件不适用于evaluate函数句柄。例如,你可以在一个单独(out-scope)通过句柄执行一个子函数,这要求句柄是在in-scope创建的。

 

   handle=@(arglist)anonymous_function用来创建匿名函数(anonymous function)并返回该匿名函数的句柄。括号右边的函数体是单个的matlab语句(statement)或者matlab命令。arglist是一个用逗号“,”分隔的输入变量列表。该函数通过句柄handle执行。

 

 

备注

    函数句柄是标准的matlab数据类型。因此,你可以像matlab其他数据类型一样进行操作。下面是在结构体和cell array中使用function的例子:

   

   然而,句柄矩阵或句柄数组是不支持的。例如:

 >> A=[@sin @cos @tan]

??? Error using ==> horzcat

Nonscalar arrays of function handles are not allowed; use cell arrays instead.

 

    对于非重载函数、子函数和私有函数(private functions),函数句柄只是引用由语法@functionname指定的函数。当通过句柄evaluate重载函数时,句柄的参数决定matlab调用的实际函数。

 

   使用isa(h,'function_handle')可以判断变量h是否是函数句柄。

 

 

例子

例一  为一个有名函数(named function)创建句柄

     下面这个例子为humps函数创建句柄并将其赋值给变量fhandle。

     

    将句柄像传递其他参数一样传递给另一个函数。这个例子将你刚创建的句柄传递给函数fminbnd,它在区间[0.3,1]上求最小值:

 

   fminbnd函数evaluate句柄@humps。fminbnd函数的一小部分源码如下所示。在行1,输入参数funfcn接收传递过来的句柄@humps,行113的语句evaluate此句柄。

 

 

例二  为匿名函数创建句柄

    下面的语句创建一个匿名函数计算一个数的平方。当调用此函数时,matlab将你传递的值赋给变量x,然后再式子x.^2中使用x。

 

运算符@为此函数创建了句柄并将其赋值给输出变量sqr。像任何函数句柄一样,你执行句柄所代表的函数应指定组成句柄的变量,其实就是在后面跟着括号中用逗号“,”隔开的参数。语法如下:

 

 要执行上面定义的sqr函数,输入

 

由于sqr是函数句柄,你可以将它传递到其他函数的参数列表中。下面的代码将sqr匿名函数传递给matlab函数quad来计算它从0到1的积分:

 

 

原文资料来源

  Matlab R2010的help文档:

  • MATLAB/Functions/Programming and Data Types/Data Types/Function Handles/function_handle (@) 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值