scipy.optimize.
brent#
- scipy.optimize.brent(func, args=(), brack=None, tol=1.48e-08, full_output=0, maxiter=500)[原始碼]#
給定一個單變數函數和可能的區間,回傳函數在容許誤差 tol 範圍內的局部最小值。
- 參數:
- func可呼叫物件 f(x,*args)
目標函數。
- argstuple,選用
額外參數(如果有的話)。
- bracktuple,選用
可以是滿足
xa < xb < xc
且func(xb) < func(xa) and func(xb) < func(xc)
的三元組(xa, xb, xc)
,或是一對(xa, xb)
作為下坡區間搜尋的起始點(參見scipy.optimize.bracket
)。 最小值x
不一定會滿足xa <= x <= xb
。- tolfloat,選用
解 xopt 可接受的相對誤差,用於判斷收斂。
- full_outputbool,選用
若為 True,則回傳所有輸出參數 (xmin, fval, iter, funcalls)。
- maxiterint,選用
解中的最大迭代次數。
- 回傳值:
- xminndarray
最佳點。
- fvalfloat
(選用輸出)最佳函數值。
- iterint
(選用輸出)迭代次數。
- funcallsint
(選用輸出)目標函數評估次數。
另請參閱
minimize_scalar
純量單變數函數最小化演算法的介面。 請特別參閱 ‘Brent’ method 方法。
註解
在可能的情況下,使用反拋物線插值來加速黃金分割法的收斂速度。
不保證最小值位於 brack 指定的範圍內。 請參閱
scipy.optimize.fminbound
。範例
我們說明當 brack 的大小分別為 2 和 3 時,此函數的行為。 在 brack 形式為
(xa, xb)
的情況下,我們可以觀察到對於給定的值,輸出不一定位於(xa, xb)
範圍內。>>> def f(x): ... return (x-1)**2
>>> from scipy import optimize
>>> minimizer = optimize.brent(f, brack=(1, 2)) >>> minimizer 1 >>> res = optimize.brent(f, brack=(-1, 0.5, 2), full_output=True) >>> xmin, fval, iter, funcalls = res >>> f(xmin), fval (0.0, 0.0)