比较python和matlab中的fsolve结果

rms*_*987 4 python matlab nonlinear-functions complex-numbers numerical-methods

我对几天前写的帖子有一个跟进问题,谢谢你以前的反馈:

从python中的非线性方程组中寻找复杂的根

我现在已经在python中设置了设置的非线性方程,因此fsolve将独立处理实部和虚部.但是,仍然存在python"fsolve"收敛到正确解决方案的问题.我有完全相同的输入在Matlab中使用,经过双重检查后,方程组也完全相同.无论我如何设置初始值,Matlab都将始终收敛到正确的解决方案.但是,对于python,每个初始条件都会产生不同的结果,而不是正确的结果.在几分之一秒后,python会出现以下警告:

/opt/local/Library/Frameworks/Python.framework/Versions/Current/lib/python2.7/site-packages/scipy/optimize/minpack.py:227: 
RuntimeWarning: The iteration is not making good progress, as measured by the 
improvement from the last ten iterations.
warnings.warn(msg, RuntimeWarning) 
Run Code Online (Sandbox Code Playgroud)

我想知道在python和Matlab中的fsolve之间是否存在一些已知的差异,以及是否有一些已知的方法来优化python中的性能.

非常感谢你

hor*_*ler 7

我认为你不应该依赖这些名字相同的事实.我从你的另一个问题中看到你指出Matlab fsolve使用'levenberg-marquardt'算法而不是默认算法.Python scipy.optimize.fsolve使用MINPACK的hybrd算法.Levenberg-Marquardt通过最小化函数的平方和来找到根,并且非常稳健.它不像默认'trust-region-dogleg'算法那样真正的根寻找方法.我不知道这些hybrd计划是如何运作的,但他们声称这是对鲍威尔方法的修改.

如果你想要类似于你在Matlab中所做的事情,我会寻找一个实现Levenberg-Marquardt的优化方案,例如scipy.optimize.root你在前一个问题中也使用过的方案.你没有使用它的原因是什么?