打印

函数句柄的小总结

[复制链接]
465|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cooldog123pp|  楼主 | 2020-8-29 20:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  函数句柄在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赋值,再运算,可能出现未定义与函数句柄类型相对应的运算'运算维度不符等问题


使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1964

主题

6702

帖子

31

粉丝