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 < xcfunc(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)