當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python SciPy optimize.leastsq用法及代碼示例


本文簡要介紹 python 語言中 scipy.optimize.leastsq 的用法。

用法:

scipy.optimize.leastsq(func, x0, args=(), Dfun=None, full_output=False, col_deriv=False, ftol=1.49012e-08, xtol=1.49012e-08, gtol=0.0, maxfev=0, epsfcn=None, factor=100, diag=None)#

最小化一組方程的平方和。

x = arg min(sum(func(y)**2,axis=0))
         y

參數

func 可調用的

應至少采用一個(可能長度為 N 向量)參數並返回 M 浮點數。它不得返回NaNs,否則擬合可能會失敗。 M 必須大於或等於 N

x0 ndarray

最小化的起始估計。

args 元組,可選

func 的任何額外參數都放在這個元組中。

Dfun 可調用的,可選的

計算具有跨行導數的 func 的雅可比行列式的函數或方法。如果這是無,雅可比將被估計。

full_output 布爾型,可選

如果True,返回所有可選輸出(不僅僅是x伊爾)。

col_deriv 布爾型,可選

如果是 True ,則指定雅可比函數沿列計算導數(更快,因為沒有轉置操作)。

ftol 浮點數,可選

平方和所需的相對誤差。

xtol 浮點數,可選

近似解中所需的相對誤差。

gtol 浮點數,可選

函數向量和雅可比列之間所需的正交性。

maxfev 整數,可選

函數的最大調用次數。如果提供了 Dfun,則默認 maxfev 為 100*(N+1),其中 N 是 x0 中的元素數,否則默認 maxfev 為 200*(N+1)。

epsfcn 浮點數,可選

用於確定雅可比行列式前向差分近似的合適步長的變量(對於 Dfun=None)。通常實際步長為 sqrt(epsfcn)*x 如果 epsfcn 小於機器精度,則假設相對誤差在機器精度的數量級。

factor 浮點數,可選

確定初始步長界限的參數(factor * || diag * x||)。應該在間隔 (0.1, 100) 中。

diag 順序,可選

N 個正條目,用作變量的比例因子。

返回

x ndarray

解決方案(或不成功調用的最後一次迭代的結果)。

cov_x ndarray

Hessian 矩陣的逆矩陣。法雅克ipvt用於構建 Hessian 矩陣的估計。 None 值表示奇異矩陣,表示參數中的曲率x數值上是平坦的。獲取參數的協方差矩陣x,cov_x必須乘以殘差方差 - 請參閱curve_fit。僅返回如果full_outputTrue.

infodict dict

帶有鍵的可選輸出字典:

nfev

函數調用次數

fvec

在輸出處評估的函數

fjac

最終近似雅可比矩陣的 QR 分解的 R 矩陣的排列,按列存儲。與 ipvt 一起,可以近似估計估計的協方差。

ipvt

一個長度為 N 的整數數組,它定義了一個置換矩陣 p,使得 fjac*p = q*r,其中 r 是具有非遞增大小的對角線元素的上三角形。 p 的 j 列是單位矩陣的 ipvt(j) 列。

qtf

向量 (transpose(q) * fvec)。

僅返回如果full_outputTrue.

mesg str

一條字符串消息,提供有關故障原因的信息。僅返回如果full_outputTrue.

ier int

一個整數標誌。如果它等於 1、2、3 或 4,則找到了解決方案。否則,找不到解決方案。無論哪種情況,可選的輸出變量‘mesg’ 都會提供更多信息。

注意

“leastsq” 是 MINPACK 的 lmdif 和 lmder 算法的封裝。

cov_x 是最小二乘目標函數的 Hessian 矩陣的雅可比近似。這種近似假設目標函數基於一些觀察到的目標數據 (ydata) 和參數 f(xdata, params) 的(非線性)函數之間的差異

func(params) = ydata - f(xdata, params)

使得目標函數為

min   sum((ydata - f(xdata, params))**2, axis=0)
params

解 x 始終是一維數組,無論 x0 的形狀如何,或者 x0 是否為標量。

例子

>>> from scipy.optimize import leastsq
>>> def func(x):
...     return 2*(x-3)**2+1
>>> leastsq(func, 0)
(array([2.99999999]), 1)

相關用法


注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.optimize.leastsq。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。