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

函数句柄/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的例子:

  S.a=@sin;S.b=@cos;S.c=@tan C={@sin,@cos,@tan} 

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

 >> 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。

    fhandle=@humps; 

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

>> x=fminbnd(fhandle,0.3,1); >> x x = 0.6370 

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

1 function [xf,fval,exitflag,output] = ... fminbnd(funfcn,ax,bx,options,varargin) . . . 113 fx = funfcn(x,varargin{:}); 

 

例二  为匿名函数创建句柄

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

sqr=@(x)x.^2; 

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

fhandle(arg1, arg2, ..., argN) 

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

>> a=sqr(5) a = 25 

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

>> quad(sqr,0,1) ans = 0.3333 

 

原文资料来源

  Matlab R2010的help文档:

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

你可能感兴趣的:(matlab)