MATLAB调用fzero函数报错无效函数句柄如何解决
报错原因
- MATLAB 新版
fzero函数已废弃字符串表达式作为入参的支持,仅接受函数句柄类型作为第一个输入参数 - 你当前传入的是字符串类型的表达式,
fzero会尝试将其解析为函数名或者带@前缀的合法函数句柄,匹配失败就会抛出找不到对应函数的错误
修复方法
- 将原代码中字符串形式的函数定义改为匿名函数句柄,修改第一行代码为:
f = @(x) 0.1*x - sin(2 * x) + 0.25;
其中@(x)是MATLAB匿名函数的定义语法,括号内的x是函数的输入参数,后续跟函数的计算表达式,fzero可以直接调用该句柄完成不同取值下的函数计算。
- 如果你用到的自定义函数
fgraf仅支持字符串类型的表达式入参,可以分开定义两个变量分别给两个函数使用,完整修改后的代码如下:
% 字符串版本给fgraf用 f_str = '0.1*x - sin(2 * x) + 0.25'; % 函数句柄版本给fzero用 f = @(x) 0.1*x - sin(2 * x) + 0.25; [a, b] = fgraf(f_str, -3, 3); zs1 = fzero(f, [a, b]); [a, b] = fgraf(f_str, -3, 3); zs2 = fzero(f, [a, b]); [a, b] = fgraf(f_str, -3, 3); zs3 = fzero(f, [a, b]);
内容的提问来源于stack exchange,提问作者Deividas Kek
相关产品推荐
相关产品推荐

