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, xc),满足 xa < xb < xcfunc(xb) < func(xa) and  func(xb) < func(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)