fsolve的问题 - 它返回复杂的根

时间:2017-03-28 16:28:16

标签: matlab

我正在使用以下代码

x0=[2.01,3.20];
f = @(d) airy(1,-i^(1/3)*d(2))-d(1)*i^(1/3)*integral(@(n) airy(n),-i^(1/3)*d(2), 100);
fsolve(f,x0)

它返回的解决方案不是我正在寻找的解决方案,而且它很复杂(fsolve应该只返回真正的根!)。有些东西不能正常工作。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

关于输出参数,documentation online有点不清楚。由于输入函数很复杂,因此它也会有复数值的根。文档可能指的是它忽略了实值函数的复杂根源。

例如,如果我们使用实值函数x.^3 + x.^2 + 1而不是你的函数,我们可以看到,尽管该函数有三个根(一个实数和两个复数),fsolve只返回实数根

fsolve(@(x)x.^3 + x.^2 + 1, 1.5)
%   -1.4656

对于您的函数,您可以通过将它们替换回函数并查看函数的值来验证根确实是正确的

R = fsolve(f, x0);
f(R)
%   1.5099e-13 + 1.4300e-13i