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元组,可选

包含函数的额外参数 ff 由以下人员调用 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

rRootResults (在以下情况下出席 full_output = True )RootResults(如果FULL_OUTPUT=True则存在)

对象,该对象包含有关收敛的信息。具体地说, r.converged 如果例程收敛,则为True。

参见

brentq, brenth, ridder, bisect, newton
fsolve

在N维中查找零。

注意事项

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=1k=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