EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
Matlab中函数句柄@的作用分享 $ e3 R3 s5 k8 O" z' A t
问:f=@(x)acos(x)表示什么意思?其中@代表什么?$ v* ?% p6 H8 L! F) q
答:表示f为函数句柄,@是定义句柄的运算符。f=@(x)acos(x) 相当于建立了一个函数文件:! j, H; D5 ]9 i9 b$ K; f
% f.m
; k, E( V, [3 L' O. |: p5 f1 j9 J* }function y=f(x)
1 f5 S: ^2 m8 |6 G" o' ^y=acos(x); 若有下列语句:xsqual=@(x)1/2.*(x==-1/2)+1.*(x>-1/28&x<1/2)+1.2.*(x==-1/2); 则相当于建立了一个函数文件: % xsqual.m function y=xsqual(x) y=1/2.*(x==-1/2)+1.*(x>-1/28&x<1/2)+1.2.*(x==-1/2); 详细说明: 1、函数句柄/function_handle(@):是一种间接调用函数的方式。
) ` o% V: Q) M. b, x4 `0 l2、语法:handle=@functionname or handle=@(arglist)anonymous_function
( d! j7 f, {3 X( l; ^! k! V9 B& z3、描述:函数句柄(function handle)是一种能够提供函数间接调用的matlab value。你可以通过传递句柄来调用各种其他功能。你也可以将句柄存储到数据结构中备用(例如Handle Graphic 回调)。句柄是matlab的标准数据类型之一。
" X& h) l' @4 L* { 当创建句柄时,你所指定的函数必须在matlab搜索路径之中,并且必须在创建语句的scope之中。例如,只要在定义子函数的文件之中,你句可以为这个子函数创建句柄。这些条件不适用于evaluate函数句柄。例如,你可以在一个单独(out-scope)通过句柄执行一个子函数,这要求句柄是在in-scope创建的。3 ^" j; t& q" Z, C6 ?
handle=@(arglist)anonymous_function用来创建匿名函数(anonymous function)并返回该匿名函数的句柄。括号右边的函数体是单个的matlab语句(statement)或者matlab命令。arglist是一个用逗号“,”分隔的输入变量列表。该函数通过句柄handle执行。
$ h0 j I5 v7 Q# t备注:函数句柄是标准的matlab数据类型。因此,你可以像matlab其他数据类型一样进行操作。 4、函数句柄的好处) Q4 @3 Z9 c; N
①提高运行速度。因为matlab对函数的调用每次都是要搜索所有的路径,从set path中我们可以看到,路径是非常的多的,所以如果一个函数在你的程序中需要经常用到的话,使用函数句柄,对你的速度会有提高的。& m# r9 F Z. ?! o8 [: Z# M- e/ O
②使用可以与变量一样方便。比如说,我再这个目录运行后,创建了本目录的一个函数句柄,当我转到其他的目录下的时候,创建的函数句柄还是可以直接调用的,而不需要把那个函数文件拷贝过来。因为你创建的function handles中,已经包含了路径。
) s! d: |" |+ g) l, t |