对于几天前写的帖子,我还有一个后续问题,谢谢您之前的反馈:
我现在已经在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中的性能。
非常感谢你
我认为您不应该依赖名称相同的事实。我从另一个问题中看到,您正在指定Matlabfsolve
使用'levenberg-marquardt'
算法而不是默认算法。Pythonscipy.optimize.fsolve
使用MINPACK的hybrd
算法。Levenberg-Marquardt大约通过最小化函数平方和找到根,并且非常健壮。它不是默认'trust-region-dogleg'
算法那样的真正的寻根方法。我不知道这些hybrd
方案是如何工作的,但是它们声称是Powell方法的一种改进。
如果您想要类似于在Matlab中执行的操作,那么我会寻找一种实现Levenberg-Marquardt的优化方案,例如scipy.optimize.root
,您在上一个问题中也使用了该方案。有没有理由不使用它?
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句