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
- 參數:
- funccallable
應至少接受一個(可能是長度為
N
的向量)引數,並傳回M
個浮點數。它不得傳回 NaN,否則擬合可能會失敗。M
必須大於或等於N
。- x0ndarray
最小化的起始估計值。
- argstuple, optional
要傳遞給 func 的任何額外引數都放在這個元組中。
- Dfuncallable, optional
用於計算 func 的 Jacobian 矩陣的函數或方法,導數沿著列排列。如果為 None,將會估計 Jacobian 矩陣。
- full_outputbool, optional
如果為
True
,則傳回所有可選輸出(不只是 x 和 ier)。- col_derivbool, optional
如果為
True
,指定 Jacobian 函數計算導數時是沿著行向下計算(速度更快,因為沒有轉置運算)。- ftolfloat, optional
平方和中期望的相對誤差。
- xtolfloat, optional
近似解中期望的相對誤差。
- gtolfloat, optional
函數向量與 Jacobian 矩陣的列之間期望的正交性。
- maxfevint, optional
函數的最大呼叫次數。如果提供了 Dfun,則預設的 maxfev 為 100*(N+1),其中 N 是 x0 中的元素數量;否則預設的 maxfev 為 200*(N+1)。
- epsfcnfloat, optional
用於確定 Jacobian 矩陣前向差分近似的合適步長的變數(對於 Dfun=None)。通常,實際步長將為 sqrt(epsfcn)*x。如果 epsfcn 小於機器精度,則假定相對誤差與機器精度同階。
- factorfloat, optional
一個參數,用於確定初始步長邊界 (
factor * || diag * x||
)。應在區間(0.1, 100)
內。- diagsequence, optional
N 個正數條目,用作變數的比例因子。
- 傳回值:
- xndarray
解(或不成功呼叫的最後一次迭代結果)。
- cov_xndarray
Hessian 矩陣的逆矩陣。fjac 和 ipvt 用於建構 Hessian 矩陣的估計值。值 None 表示奇異矩陣,這表示參數 x 中的曲率在數值上是平坦的。若要取得參數 x 的共變異數矩陣,cov_x 必須乘以殘差的變異數 – 請參閱 curve_fit。僅在 full_output 為
True
時傳回。- infodictdict
包含可選輸出的字典,鍵值如下
nfev
函數呼叫的次數
fvec
在輸出處評估的函數
fjac
最終近似 Jacobian 矩陣的 QR 分解的 R 矩陣的排列,以列方式儲存。與 ipvt 一起,可以近似估計值的共變異數。
ipvt
長度為 N 的整數陣列,其定義排列矩陣 p,使得 fjac*p = q*r,其中 r 是上三角矩陣,對角線元素的大小非遞增。p 的第 j 列是單位矩陣的第 ipvt(j) 列。
qtf
向量 (transpose(q) * fvec)。
僅在 full_output 為
True
時傳回。- mesgstr
提供有關失敗原因的字串訊息。僅在 full_output 為
True
時傳回。- ierint
整數旗標。如果等於 1、2、3 或 4,則表示已找到解。否則,表示未找到解。在任何一種情況下,可選輸出變數 'mesg' 都會提供更多資訊。
另請參閱
least_squares
用於解決變數受限的非線性最小平方問題的較新介面。特別請參閱
method='lm'
。
註解
“leastsq” 是 MINPACK 的 lmdif 和 lmder 演算法的包裝器。
cov_x 是最小平方目標函數的 Hessian 矩陣的 Jacobian 近似值。此近似值假設目標函數基於某些觀察到的目標資料 (ydata) 與參數的(非線性)函數 f(xdata, params) 之間的差異
func(params) = ydata - f(xdata, params)
因此目標函數為
min sum((ydata - f(xdata, params))**2, axis=0) params
解 x 始終為 1 維陣列,無論 x0 的形狀為何,也無論 x0 是否為純量。
範例
>>> from scipy.optimize import leastsq >>> def func(x): ... return 2*(x-3)**2+1 >>> leastsq(func, 0) (array([2.99999999]), 1)