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

相關文章
相關標籤/搜索