brenth#
- scipy.optimize.brenth(f, a, b, args=(), xtol=2e-12, rtol=8.881784197001252e-16, maxiter=100, full_output=False, disp=True)[源代码]#
使用双曲外推的 Brent 方法查找在区间内函数的根。
经典 Brent 例程的变体,用于查找函数 f 在参数 a 和 b 之间的根,该方法使用双曲外推而不是逆二次外推。Bus & Dekker (1975) 保证了此方法的收敛性,声称此处的函数评估次数上限是二分法的 4 或 5 倍。f(a) 和 f(b) 不能有相同的符号。通常,与 brent 例程相当,但没有经过大量测试。它是正割方法的安全版本,它使用双曲外推。此处的版本由 Chuck Harris 提供,并实现了[BusAndDekker1975]的算法 M,其中可以找到更多详细信息(收敛特性、其他说明等)。
- 参数:
- f函数
返回数字的 Python 函数。f 必须是连续的,并且 f(a) 和 f(b) 必须具有相反的符号。
- a标量
区间 [a,b] 的一个端点。
- b标量
区间 [a,b] 的另一个端点。
- xtol数字,可选
计算出的根
x0
将满足np.allclose(x, x0, atol=xtol, rtol=rtol)
,其中x
是精确根。该参数必须为正数。与brentq
一样,对于好的函数,该方法通常会满足上述条件,其中xtol/2
和rtol/2
。- rtol数字,可选
计算出的根
x0
将满足np.allclose(x, x0, atol=xtol, rtol=rtol)
,其中x
是精确根。该参数不能小于其默认值4*np.finfo(float).eps
。与brentq
一样,对于好的函数,该方法通常会满足上述条件,其中xtol/2
和rtol/2
。- maxiter整数,可选
如果在 maxiter 次迭代中未实现收敛,则会引发错误。必须 >= 0。
- args元组,可选
包含函数 f 的额外参数。f 通过
apply(f, (x)+args)
调用。- full_output布尔值,可选
如果 full_output 为 False,则返回根。如果 full_output 为 True,则返回值是
(x, r)
,其中 x 是根,而 r 是一个RootResults
对象。- disp布尔值,可选
如果为 True,如果算法未收敛,则引发 RuntimeError。否则,收敛状态会记录在任何
RootResults
返回对象中。
- 返回:
- root浮点数
f 在 a 和 b 之间的根。
- r
RootResults
(如果full_output = True
,则存在) 包含有关收敛的信息的对象。特别是,如果例程收敛,则
r.converged
为 True。
另请参阅
fmin
、fmin_powell
、fmin_cg
、fmin_bfgs
、fmin_ncg
多元局部优化器
leastsq
非线性最小二乘最小化器
fmin_l_bfgs_b
、fmin_tnc
、fmin_cobyla
约束多元优化器
basinhopping
、differential_evolution
、brute
全局优化器
fminbound
、brent
、golden
、bracket
局部标量最小化器
fsolve
N-D 求根
brentq
、ridder
、bisect
、newton
1-D 求根
fixed_point
标量不动点查找器
参考文献
[BusAndDekker1975]Bus, J. C. P., Dekker, T. J., “寻找函数零点的两个保证收敛的有效算法”,ACM 数学软件汇刊,第 1 卷,第 4 期,1975 年 12 月,第 330-345 页。第 3 节:“算法 M”。DOI:10.1145/355656.355659
示例
>>> def f(x): ... return (x**2 - 1)
>>> from scipy import optimize
>>> root = optimize.brenth(f, -2, 0) >>> root -1.0
>>> root = optimize.brenth(f, 0, 2) >>> root 1.0