gamesun

求解非线性超定方程组,网上搜到的大多是线性方程组的最小二乘解法,对于非线性方程组无济于事。

这里分享一种方法:SciPy库的scipy.optimize.leastsq函数。

import numpy as np
from scipy.optimize import leastsq
from math import sqrt

def func(i):
    x,y,z = i
    return np.asarray((
            x**2-x*y+4,
            x**2+y**2-x*z-25,
            z**2-y*x+4,
            x**3+y**3+z**3-127.6
        ))

root = leastsq(func, np.asarray((1,1,1)))  # 初始猜测值
print(root[0])

运行结果:

[ 1.00886951  5.00607313  1.036197  ]

 缺点:只是普通的最小二乘解法,对于参数过于相近的情况,比如病态雅克比矩阵的求解效果不好。

有知道L-M算法(Levenberg-Marquardt algorithm)的朋友望告知。

 


分类:

技术点:

相关文章:

  • 2022-12-23
  • 2021-09-11
  • 2021-10-28
  • 2022-12-23
  • 2021-08-10
  • 2022-12-23
  • 2022-12-23
  • 2021-10-19
猜你喜欢
  • 2021-06-14
  • 2022-01-14
  • 2021-11-22
  • 2019-07-25
  • 2021-10-01
  • 2018-09-26
  • 2021-08-10
相关资源
相似解决方案