函数句柄matlab

来源:互联网 发布:钢材进销存软件 编辑:程序博客网 时间:2024/06/05 00:46

 

        函数句柄是一种特殊的数据类型,它提供了间接调用的函数的方法,类似于c语言中的指针,只不过这里是指向一个函数。

      函数句柄包含了函数的路径、函数名、类型及可能存在的重载方法,必须通过专门的定义创建,创建函数句柄需要用到的操作符是@,格式为

Fhandle=@functionname

例如:

m=[3 2 0;-5 0 7;0 0 1];

[row,col,val]=find(m)

f=@find;[row,col,val]=f(m)

这两条语句得到的结果是一样的。

 

 

比如定义f(x)=x^2,可以写为

f=@(x)(x.^2)

其中@(x)(x.^2)就是匿名函数,第一个括号里面是自变量,第二个括号里面是表达式,@是函数指针

f=@(x)(x.^2)表示将匿名函数@(x)(x.^2)赋值给f,于是f就表示该函数。

于是f(2)=2.^2=4;f(1:3)=[1:3].^2=[14 9]等等

 

再比如:f=@(x)acos(x)表示什么意思?

f为函数句柄,@是定义句柄的运算符。f=@(x)acos(x)相当于建立了一个函数文件:

% f.m

function y=f(x)

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);

 


定义匿名函数时也可以调用别的匿名函数,比如

f1=@(x,y)(x.^2+y.^2)

定义了函数x^2+y^2

f2=@(t)(f1(t,2))

定义了函数t^2+4

f3=@(x)(f1(x(1),x(2)))

定义了函数x(1)^2+x(2)^2

使用匿名函数时一定要注意函数本身的参数形式,如

f1(2,3)

表示2^2+3^2

f2(3)=3

表示3^2+4

f3([1,2])

表示1^2+2^2


说白了就是函数指针,当然这样做有它的好处

      ①提高运行速度。因为matlab对函数的调用每次都是要搜索所有的路径,从set path中我们可以看到,路径是非常的多的,所以如果一个函数在你的程序中需要经常用到的话,使用函数句柄,对你的速度会有提高的。

      ②使用可以与变量一样方便。比如说,我再这个目录运行后,创建了本目录的一个函数句柄,当我转到其他的目录下的时候,创建的函数句柄还是可以直接调用的,而不需要把那个函数文件拷贝过来。因为你创建的function handles中,已经包含了路径,

 

5 0
原创粉丝点击