ridder#
- scipy.optimize.ridder(f, a, b, args=(), xtol=2e-12, rtol=8.881784197001252e-16, maxiter=100, full_output=False, disp=True)[源代码]#
使用 Ridder 方法在区间内查找函数的根。
- 参数:
- f函数
返回数字的 Python 函数。f 必须是连续的,并且 f(a) 和 f(b) 必须具有相反的符号。
- a标量
包围区间 [a,b] 的一个端点。
- b标量
包围区间 [a,b] 的另一个端点。
- xtol数字,可选
计算出的根
x0
将满足np.allclose(x, x0, atol=xtol, rtol=rtol)
,其中x
是精确根。该参数必须为正数。- rtol数字,可选
计算出的根
x0
将满足np.allclose(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
标量定点查找器
备注
使用 [Ridders1979] 方法查找参数 a 和 b 之间函数 f 的根。Ridders 的方法比二分法快,但通常不如 Brent 例程快。[Ridders1979] 提供了该算法的经典描述和来源。在最新版本的 Numerical Recipes 中也可以找到描述。
这里使用的例程与标准表示略有不同,以便更仔细地考虑公差。
参考文献
示例
>>> def f(x): ... return (x**2 - 1)
>>> from scipy import optimize
>>> root = optimize.ridder(f, 0, 2) >>> root 1.0
>>> root = optimize.ridder(f, -2, 0) >>> root -1.0