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 < xc
且func(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)