[英]Comparing fsolve results in python and matlab
我对几天前写的帖子有一个跟进问题,谢谢你以前的反馈:
我现在已经在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)
我想知道在python和Matlab中的fsolve之间是否存在一些已知的差异,以及是否有一些已知的方法来优化python中的性能。
非常感谢你
我不认为你应该依赖名称相同的事实。 我从你的另一个问题中看到你指出Matlab的fsolve
使用'levenberg-marquardt'
算法而不是默认算法。 Python的scipy.optimize.fsolve
使用MINPACK的hybrd
算法。 Levenberg-Marquardt通过最小化函数的平方和来找到根,并且非常稳健。 它不像默认的'trust-region-dogleg'
算法那样真正的根发现方法。 我不知道hybrd
方案是如何工作的,但他们声称是对鲍威尔方法的修改。
如果你想要类似于你在Matlab中所做的事情,我会寻找一个实现Levenberg-Marquardt的优化方案,例如scipy.optimize.root
,你也在之前的问题中使用过。 你没有使用它的原因是什么?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.