Matlab fsolve出现问题-它返回复杂的根

Matlab fsolve出现问题-它返回复杂的根,matlab,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应该只返回真正的根!)。有些东西工作不正常。有什么想法吗?关于输出参数有点不清楚。由于您的输入函数是复杂的,因此它也将具有复数值根。文档可能是指它忽略了实值函数的复数根 例如,如果我们使用实

我正在使用以下代码

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应该只返回真正的根!)。有些东西工作不正常。有什么想法吗?

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

例如,如果我们使用实值函数
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

你的函数是复数的,那么为什么根不也是复数的呢
i
1i
因为根据“输出参数”部分,解决方案是真实的(无论您输入什么),这就是问题所在,它应该忽略可能的复数根,对吗?它没有@只有当你的输入是真实的时,你才可以。你的意见是complex@Hans请参阅显示行为差异的更新示例