Python最小二乘法解非线性超定方程组

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

这里分享一种方法: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])

运行结果:spa

[ 1.00886951  5.00607313  1.036197  ]

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

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

相关文章
相关标签/搜索