scipy.optimize.

brent#

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

给定一个单变量函数和一个可能的括号,返回函数的局部最小值,该最小值被隔离到 tol 的分数精度。

参数:
funccallable f(x,*args)

目标函数。

argstuple, 可选

附加参数(如果存在)。

bracktuple, 可选

要么是一个三元组 (xa, xb, xc) 满足 xa < xb < xcfunc(xb) < func(xa) and  func(xb) < func(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)