比较python和matlab中的fsolve结果

rmsrms1987

对于几天前写的帖子,我还有一个后续问题,谢谢您之前的反馈:

从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) 

我想知道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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章