fmin_ncg#
- scipy.optimize.fmin_ncg(f, x0, fprime, fhess_p=None, fhess=None, args=(), avextol=1e-05, epsilon=1.4901161193847656e-08, maxiter=None, full_output=0, disp=1, retall=0, callback=None, c1=0.0001, c2=0.9)[source]#
使用 Newton-CG 方法無約束地最小化函數。
- 參數:
- f可呼叫物件
f(x, *args)
要最小化的目標函數。
- x0ndarray
初始猜測值。
- fprime可呼叫物件
f'(x, *args)
f 的梯度。
- fhess_p可呼叫物件
fhess_p(x, p, *args)
, 選用 計算 f 的 Hessian 矩陣與任意向量 p 的乘積的函數。
- fhess可呼叫物件
fhess(x, *args)
, 選用 計算 f 的 Hessian 矩陣的函數。
- argstuple,選用
傳遞給 f、fprime、fhess_p 和 fhess 的額外參數 (同一組額外參數會提供給所有這些函數)。
- epsilonfloat 或 ndarray,選用
如果 fhess 被近似,則使用此值作為步長。
- callback可呼叫物件,選用
一個選用的使用者提供函數,在每次迭代後被呼叫。呼叫方式為 callback(xk),其中 xk 是目前的參數向量。
- avextolfloat,選用
當最小化器的平均相對誤差低於此值時,即假定收斂。
- maxiterint,選用
要執行的最大迭代次數。
- full_outputbool,選用
如果為 True,則返回選用的輸出。
- dispbool,選用
如果為 True,則印出收斂訊息。
- retallbool,選用
如果為 True,則返回每次迭代結果的列表。
- c1float,預設值:1e-4
Armijo 條件規則的參數。
- c2float,預設值:0.9
曲率條件規則的參數
- f可呼叫物件
- 返回:
- xoptndarray
最小化 f 的參數,即
f(xopt) == fopt
。- foptfloat
xopt 處的函數值,即
fopt = f(xopt)
。- fcallsint
進行的函數呼叫次數。
- gcallsint
進行的梯度呼叫次數。
- hcallsint
進行的 Hessian 呼叫次數。
- warnflagint
演算法產生的警告。 1:超出最大迭代次數。 2:線搜索失敗 (精度損失)。 3:遇到 NaN 結果。
- allvecslist
如果 retall 為 True 時,每次迭代的結果 (請參閱下方)。
另請參閱
minimize
多變數函數最小化演算法的介面。 特別參閱 ‘Newton-CG’ 方法。
註解
只需提供 fhess_p 或 fhess 其中之一。 如果提供了 fhess,則會忽略 fhess_p。 如果 fhess 和 fhess_p 都沒有提供,則 Hessian 乘積將使用 fprime 上的有限差分來近似。 fhess_p 必須計算 Hessian 矩陣與任意向量的乘積。 如果沒有提供,則會使用 fprime 上的有限差分來計算。
Newton-CG 方法也稱為截斷牛頓法。 此函數與 scipy.optimize.fmin_tnc 的不同之處在於
- scipy.optimize.fmin_ncg 完全使用 NumPy 以 Python 撰寫
和 scipy,而 scipy.optimize.fmin_tnc 則呼叫 C 函數。
- scipy.optimize.fmin_ncg 僅適用於無約束最小化
而 scipy.optimize.fmin_tnc 適用於無約束最小化或盒約束最小化。(盒約束為每個變數分別提供上下界。)
參數 c1 和 c2 必須滿足
0 < c1 < c2 < 1
。參考文獻
Wright & Nocedal, ‘Numerical Optimization’, 1999, p. 140.