函数句柄matlab
2016-06-02 12:12
537 查看
函数句柄是一种特殊的数据类型,它提供了间接调用的函数的方法,类似于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中,已经包含了路径,
相关文章推荐
- Matlab将矩阵保存为图像
- 深度学习系列文章之四:ubantu系统下MATLAB安装
- 最近邻(NNC)
- 【matlab函数】——str2func函数的使用
- MATLAB基础之矩阵相关的建立、基本操作
- 关于MATLAB中imfilter函数的说明
- Matlab 图像处理 形态学 腐蚀 膨胀 开闭运算 连通分量
- [Matlab] matlab与C/C++混合编程汇总
- Matlab生成棋盘格点图
- Windows下Faster R-CNN 配置/Matlab版本编译
- K-近邻法(K-NN)
- Matlab 画柱状图
- 第一次打开matlab
- [Matlab] 如何将axes填充整个Figure
- matlab错误:Subscript indices must either be real positive integers or logicals.
- Matlab 图像预处理
- MATLAB的乱七八糟问题
- Java 调用Matlab
- matlab乘与点乘的区别 (*与.* ^与.^)
- 线性回归代码matlab