scipy.optimize.toms748¶
- scipy.optimize.toms748(f, a, b, args=(), k=1, xtol=2e-12, rtol=8.881784197001252e-16, maxiter=100, full_output=False, disp=True)[源代码]¶
用TOMS算法748方法求零。
实现了Alefeld,Potro和Shii的算法748方法来寻找函数的零 f 在区间上 [a , b] ,在哪里 f(a) 和 f(b) 一定有相反的标志。
它使用反三次插值和“牛顿-二次”步骤的混合。 [APS1995] 。
- 参数
- f功能
返回标量的Python函数。该函数 \(f\) 必须是连续的,并且 \(f(a)\) 和 \(f(b)\) 有相反的迹象。
- a标量,
搜索间隔的下界
- b标量,
搜索区间的上界
- args元组,可选
包含函数的额外参数 f 。 f 由以下人员调用
f(x, *args)
。- k整型,可选
执行每次迭代的牛顿二次步数。
k>=1
。- xtol标量,可选
计算出的根
x0
将会令人满意np.allclose(x, x0, atol=xtol, rtol=rtol)
,在哪里x
就是它的确切根部。该参数必须为非负。- rtol标量,可选
计算出的根
x0
将会令人满意np.allclose(x, x0, atol=xtol, rtol=rtol)
,在哪里x
就是它的确切根部。- maxiter整型,可选
如果在以下方面未实现融合 maxiter 迭代,则会引发错误。必须>=0。
- full_output布尔值,可选
如果 full_output 为false,则返回根。如果 full_output 为True,则返回值为
(x, r)
,在哪里 x 是根,并且 r 是一种RootResults
对象。- disp布尔值,可选
如果为True,则在算法不收敛时引发RuntimeError。否则,收敛状态将记录在
RootResults
返回对象。
- 退货
- x0浮动
的近似零 f
- r :
RootResults
(在以下情况下出席full_output = True
)RootResults(如果FULL_OUTPUT=True则存在) 对象,该对象包含有关收敛的信息。具体地说,
r.converged
如果例程收敛,则为True。
注意事项
f 必须是连续的。算法748,具有
k=2
是已知的求四次连续可微函数根的最有效算法。与布伦特的算法相比,布伦特的算法在最后一步可能只减小包围括号的长度,而算法748在每次迭代中以与其找到根相同的渐近效率来减小它。为便于陈述效率指数,假设 f 有4个连续的导数。为
k=1
收敛阶至少为2.7,每迭代渐近2次函数求值,效率指数约为1.65。为k=2
,阶数约为4.6,每迭代渐近3次函数求值,效率指数为1.66。对于更高的 k ,效率指数逼近的第k次方根。(3k-2)
,因此k=1
或k=2
通常都是合适的。参考文献
- APS1995
Alefeld,G.E.和Potra,F.A.和施一勋, 算法748:连续函数的零点封闭 、ACM Trans.数学课。软件。第221卷(1995年)doi={10.1145/210089.210111}
示例
>>> def f(x): ... return (x**3 - 1) # only one real root at x = 1
>>> from scipy import optimize >>> root, results = optimize.toms748(f, 0, 2, full_output=True) >>> root 1.0 >>> results converged: True flag: 'converged' function_calls: 11 iterations: 5 root: 1.0