bisect#
- scipy.optimize.bisect(f, a, b, args=(), xtol=2e-12, rtol=np.float64(8.881784197001252e-16), maxiter=100, full_output=False, disp=True)[源代码]#
使用二分法在一个区间内查找函数的根。
基本的二分法例程,用于在参数 a 和 b 之间查找函数 f 的根。 f(a) 和 f(b) 不能同号。该方法速度慢但可靠。
- 参数:
- f函数
返回一个数值的 Python 函数。 f 必须是连续的,且 f(a) 和 f(b) 必须异号。
- a标量
区间 [a,b] 的一端。
- b标量
区间 [a,b] 的另一端。
- xtol数值,可选
计算得到的根
x0
将满足np.isclose(x, x0, atol=xtol, rtol=rtol)
,其中x
是精确根。该参数必须为正。- rtol数值,可选
计算得到的根
x0
将满足np.isclose(x, x0, atol=xtol, rtol=rtol)
,其中x
是精确根。该参数不能小于其默认值4*np.finfo(float).eps
。- 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。
另请参阅
brentq
,brenth
,bisect
,newton
fixed_point
标量定点查找器
fsolve
n 维求根
elementwise.find_root
高效的逐元素一维求根器
注意
如参数文档所述,计算得到的根
x0
将满足np.isclose(x, x0, atol=xtol, rtol=rtol)
,其中x
是精确根。以方程形式表示,此终止条件为abs(x - x0) <= xtol + rtol * abs(x0)
。默认值
xtol=2e-12
可能会导致出乎意料的行为,如果期望bisect
总是计算出相对误差接近机器精度的根。应根据具体用例谨慎选择 xtol。将xtol=5e-324
(最小的非规范化数)设置为最小值将确保最高级别的精度。对于函数求值而言,当根在零或接近零时,较大的 xtol 值可能有用,尤其是在浮点数接近零时微小的绝对差值没有实际意义的应用中。示例
>>> def f(x): ... return (x**2 - 1)
>>> from scipy import optimize
>>> root = optimize.bisect(f, 0, 2) >>> root 1.0
>>> root = optimize.bisect(f, -2, 0) >>> root -1.0