scipy.optimize.

brent#

scipy.optimize.brent(func, args=(), brack=None, tol=1.48e-08, full_output=0, maxiter=500)[源代码]#

给定一个单变量函数和一个可能的区间,返回该函数的局部最小值,其精度由 tol 指定。

参数:
func可调用对象 f(x,*args)

目标函数。

args元组,可选

附加参数(如果存在)。

brack元组,可选

可以是满足 xa < xb < xcfunc(xb) < func(xa)   func(xb) < func(xc) 的三元组 (xa, xb, xc),或用作下坡区间搜索初始点的二元组 (xa, xb)(参见 scipy.optimize.bracket)。最小值 x 不一定满足 xa <= x <= xb

tol浮点数,可选

xopt 的可接受收敛相对误差。

full_output布尔值,可选

如果为 True,则返回所有输出参数(xmin,fval,iter,funcalls)。

maxiter整数,可选

解的最大迭代次数。

返回:
xminndarray

最佳点。

fval浮点数

(可选输出)最佳函数值。

iter整数

(可选输出)迭代次数。

funcalls整数

(可选输出)目标函数评估次数。

另请参阅

minimize_scalar

标量单变量函数最小化算法的接口。特别请参阅 ‘Brent’ 方法

注释

尽可能使用反抛物线插值来加速黄金分割法的收敛。

不保证最小值位于 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)