scipy.optimize.

布伦特#

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

给定一个单变量函数和一个可能的括号,返回一个局部最小值,其精度达到 tol 的小数位数。

参数:
函数可调用函数 f(x,*args)

目标函数。

参数tuple, 可选

附加参数(如果存在)。

括号tuple, 可选

一个满足 xa < xb < xcfunc(xb) < func(xa) func(xb) < func(xc) 的三元组 (xa, xb, xc),或者一个用于下行括号搜索初始点的二元组 (xa, xb)``(参见 `scipy.optimize.bracket`)。最小化器 ``x 不一定满足 xa <= x <= xb

tolfloat, 可选

xopt 中的相对误差可接受以达到收敛。

完整输出bool, 可选

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

maxiterint, 可选

解决方案中的最大迭代次数。

返回:
xminndarray

最佳点。

fval浮动

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

iter整数

(可选输出)迭代次数。

函数调用整数

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

参见

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)