函数句柄的小总结

[复制链接]
696|0
 楼主| cooldog123pp 发表于 2020-8-29 20:22 | 显示全部楼层 |阅读模式
  函数句柄在MATLAB使用过程中经常涉及到,  个人小小的汇总一下,有不足和错误之处还望大家多多包涵和指点补充
       函数句柄的定义具体参见官方文档https://ww2.mathworks.cn/help/ma ... unction-handle.html这里就不多加叙述了
很多MATLAB内置函数使用时都需要涉及到函数句柄,像integral,fzero,fsolve等函数,这里以integral为例
个人目前掌握的创建主要三种方式
       一、使用function函数创建自定义函数,在脚本文件使用@调用
例:
  1. s=integral(@(x)fun(x),0,2)
  2. function y=fun(x)
  3. y=x.^2;
  4. end
可得
s =
    2.6667
      二、使用@匿名函数

  1. fun=@(x) x.^2;
  2. s=integral(fun,0,2)
可得
s =
    2.6667
       三、使用syms(定义变量)和matlabFunction(将sym变量转换为函数句柄)两个函数结合使用的

  1. syms x
  2. y=x^2;
  3. fun=matlabFunction(y);
  4. s=integral(fun,0,2)
可得
s =
    2.6667
      以上三种方法在求解的函数相对简单时可以互换,即如以上三个例子均是求x平方在0到2上的积分,但有时最好采用其中一种方法
一、当有其他参数需要输入时,最好使用第一种方法

  1. i=1;
  2. s=zeros(1,4);
  3. for a=1:2:7
  4.     s(i)=integral(@(x)fun(x,a),0,2);
  5.     i=i+1;
  6. end
  7. function y=fun(x,a)
  8. y=x.^2+a;
  9. end
即可求得一组积分结果
s =
    4.6667    8.6667   12.6667   16.6667
二、当需要函数内部需要先运算时,
例,需要先运算向量a与其转置相乘
  1. syms x
  2. a=[1,x,x^2];
  3. y=a*a';
  4. fun=matlabFunction(y);
  5. s=integral(fun,0,2)
可得
s =
   11.0667
此时若使用前两种方法,则因integral的求解方法先给x赋值,再运算,可能出现未定义与函数句柄类型相对应的运算'运算维度不符等问题


您需要登录后才可以回帖 登录 | 注册

本版积分规则

2304

主题

7626

帖子

31

粉丝
快速回复 在线客服 返回列表 返回顶部