函数句柄在MATLAB使用过程中经常涉及到, 个人小小的汇总一下,有不足和错误之处还望大家多多包涵和指点补充
函数句柄的定义具体参见官方文档https://ww2.mathworks.cn/help/ma ... unction-handle.html这里就不多加叙述了
很多MATLAB内置函数使用时都需要涉及到函数句柄,像integral,fzero,fsolve等函数,这里以integral为例
个人目前掌握的创建主要三种方式
一、使用function函数创建自定义函数,在脚本文件使用@调用
例:
s=integral(@(x)fun(x),0,2)
function y=fun(x)
y=x.^2;
end
可得
s =
2.6667
二、使用@匿名函数
例
fun=@(x) x.^2;
s=integral(fun,0,2)
可得
s =
2.6667
三、使用syms(定义变量)和matlabFunction(将sym变量转换为函数句柄)两个函数结合使用的
例
syms x
y=x^2;
fun=matlabFunction(y);
s=integral(fun,0,2)
可得
s =
2.6667
以上三种方法在求解的函数相对简单时可以互换,即如以上三个例子均是求x平方在0到2上的积分,但有时最好采用其中一种方法
一、当有其他参数需要输入时,最好使用第一种方法
例
i=1;
s=zeros(1,4);
for a=1:2:7
s(i)=integral(@(x)fun(x,a),0,2);
i=i+1;
end
function y=fun(x,a)
y=x.^2+a;
end
即可求得一组积分结果
s =
4.6667 8.6667 12.6667 16.6667
二、当需要函数内部需要先运算时,
例,需要先运算向量a与其转置相乘
syms x
a=[1,x,x^2];
y=a*a';
fun=matlabFunction(y);
s=integral(fun,0,2)
可得
s =
11.0667
此时若使用前两种方法,则因integral的求解方法先给x赋值,再运算,可能出现未定义与函数句柄类型相对应的运算'运算维度不符等问题
|