Matlab中函数句柄总结复盘
Posted Jeossirey
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Matlab中函数句柄总结复盘相关的知识,希望对你有一定的参考价值。
目录
MATLAB函数句柄
函数句柄(Function handle)是MATLAB的一种数据类型。包含了函数的路径、函数名、类型以及可能存在的重载方法;
引入函数句柄是为了使feval及借助于它的泛函指令工作更可靠;使“函数调用”像“变量调用”一样方便灵活;提高函数调用速度,特别在反复调用情况下更显效率;提高软件重用性,扩大子函数和私用函数的可调用范围;迅速获得同名重载函数的位置、类型信息。
可以与变量一样方便地使用:比如说,在现在这个目录运行时,创建了本目录一个函数的句柄,当转到其他目录时,可以通过函数句柄直接调用上一个目录的函数,而不需要把那个函数文件复制过来,因为创建的函数句柄中已经包含了路径信息;
提高函数调用速度:因为matlab对函数的调用每次都是要搜索所有的路径,从set path中可以看到,路径是非常的多的,所以如果一个函数在程序中需要经常用到的话,使用函数句柄,对运行速度会有所提高;
MATLAB中函数句柄的使用使得函数也可以成为输入变量,并且能很方便的调用,提高函数的可用性和独立性。
函数句柄实际上提供了一种间接调用函数的方法。创建函数句柄需要用到操作符@
创建函数句柄的语法:
fhandle = @function_filename
调用函数时就可以调用该句柄,可以实现同样的功能。
例如fhandle = @sin就创建了sin的句柄,输入fhandle(x)其实就是sin(x)的功能。
%通过测试可以发现a和b的值相等
fhandle=@sin
a=fhandle(pi)
b=sin(pi)
再给大家举个例子:
%在Matlab中新建M文件f1.m
function y=f1(X)
x1=X(1);
x2=X(2);
y=x1^2+x1*x2;
%在Matlab中再新建M文件ftest.m
function Y=ftest(f,X)
syms X1 X2;
F=f([X1,X2]);
v=[X1,X2];
grad=jacobian(F,v);
Y=subs(grad,v,X);%表示将符号表达式grad中的符号变量v替换为新的值X
建立了两个M文件之后,在命令行窗口输入以下代码:
Y=ftest(@f1,[2,1])
%结果如下
Y =
[ 5, 2]
此处@f1即为函数f1的句柄,可以用class(@f1)判断变量的类型,得到ans = function_handle即函数句柄。函数ftest是求一个二维函数在指定点的梯度值。我们可以替换目标函数为f2或其他函数同样可以求得梯度。这样函数ftest就可以适用于该二维函数在任意一点的梯度而不必做改动了。
subs函数用法
matlab中的subs函数是符号计算函数,表示将符号表达式中的某些符号变量替换为指定的新的变量,常用的调用格式为:
subs(s,old,new)表示将符号表达式s中的符号变量old替换为新的值new。
给大家举个例子:
syms x y z
s=x^2+y^2
A=subs(s,x,z)
B=subs(s,x,y,1,z)
C=subs(s,x,[1,2,3,4])
%结果如下
A=y^2 + z^2 %用z替换掉x
B=z^2 + 1 %用1替换掉x,同时用z替换掉y
C=[y^2 + 1, y^2 + 4, y^2 + 9, y^2 + 16] %用1,2,3,4分别替换掉x
希望今天的分享可以对大家有所帮助,我是杰哥,爱你如同爱自己!
以上是关于Matlab中函数句柄总结复盘的主要内容,如果未能解决你的问题,请参考以下文章