一种求 π 的迭代构想

· · 算法·理论

感谢 @Lexot 对 x_0 范围提出的指正。

有一种思路:

因为

\sin \pi=0

所以求 \pi,可以看成求方程

\sin x=0

的正根。

当然,\sin x=0 有很多根:

0,\pi,2\pi,3\pi,\cdots

如果初值选在 \pi 附近,比如 x_0=3,那么目标就是收敛到 \pi

这时自然可以想到牛顿法。

f(x)=\sin x

使用牛顿法:

x_{n+1}=x_n-\frac{f(x_n)}{f'(x_n)}

因为

f'(x)=\cos x

所以:

x_{n+1}=x_n-\frac{\sin x_n}{\cos x_n}

也就是:

x_{n+1}=x_n-\tan x_n

这个迭代在靠近 \pi 时是二阶收敛的。

所谓二阶收敛,大概意思是:如果当前误差是 e_n,下一步误差大约会变成 e_n^2 量级。也就是说,一旦接近正确答案,正确位数会增长得很快。

但我就想:牛顿法是二阶收敛,那有没有办法构造更高阶的迭代?

一个高阶求 \pi 的想法

我的想法是,不直接对 \sin x 用牛顿法,而是考虑:

g(x)=\frac1{\sin x}

因为当 x\to \pi 时,\sin x\to 0,所以 g(x)x=\pi 附近会趋向无穷。

换句话说,\pi 不是 g(x) 的零点,而是 g(x) 的一个极点。

对这种函数,可以尝试利用高阶导数的比值构造迭代。

我想到的公式是:

x_{n+1} = x_n+ (p-1) \frac{ \left.\dfrac{d^{p-2}}{dx^{p-2}}\left(\dfrac1{\sin x}\right)\right|*{x=x_n} }{ \left.\dfrac{d^{p-1}}{dx^{p-1}}\left(\dfrac1{\sin x}\right)\right|*{x=x_n} }

其中 p\ge 2

如果写得紧凑一点,就是:

x_{n+1} = x_n+ (p-1) \frac{ g^{(p-2)}(x_n) }{ g^{(p-1)}(x_n) }, \quad g(x)=\frac1{\sin x}

并希望有:

\lim_{n\to\infty}x_n=\pi

为什么这个公式看起来有道理?

x=\pi 附近,令误差:

e=x-\pi

因为

\sin x=\sin(\pi+e)=-\sin e

而当 e 很小时:

\sin e\approx e

所以:

\sin x\approx -e

于是:

\frac1{\sin x}\approx -\frac1e

也就是说,g(x)=\frac1{\sin x}\pi 附近的主要部分很像:

-\frac1{x-\pi}

而对

h(x)=\frac1{x-\pi}

求导,有:

h^{(k)}(x)=(-1)^k k!(x-\pi)^{-k-1}

于是高阶导数的比值大概会把 x-\pi 提取出来。

这就说明,用

\frac{g^{(p-2)}(x)}{g^{(p-1)}(x)}

这种结构,确实有机会构造出一个把 x\pi 推的高阶迭代。

直观地说,这个公式不是像牛顿法那样看函数的切线,而是利用更多阶导数的信息,试图一次性榨出更多误差项。

特殊情况:当 p=2

p=2,公式变成:

x_{n+1} = x_n+ \frac{ g(x_n) }{ g'(x_n) }

其中:

g(x)=\frac1{\sin x}

计算导数:

g'(x)=-\frac{\cos x}{\sin^2 x}

所以:

\frac{g(x)}{g'(x)} = \frac{\frac1{\sin x}}{-\frac{\cos x}{\sin^2 x}} -\frac{\sin x}{\cos x} -\tan x

因此:

x_{n+1}=x_n-\tan x_n

刚好退化成普通牛顿法。

这点我感觉还挺有意思:也就是说,这个公式可以看作牛顿法的一种高阶推广。

这个公式的优点和问题

这个公式理论上的优点是:

如果 p 越大,它利用的导数阶数越高,局部收敛阶也可能越高。也就是说,在已经离 \pi 比较近的时候,它可能比普通牛顿法收敛得更猛。

但是它也有很现实的问题:

第一,高阶导数不好算。

第二,高阶迭代不等于高效算法。 一个算法快不快,不只看迭代次数,还要看每一步的计算量。如果一步里要算特别复杂的高阶导数,那么总耗时可能反而更大。 第三,初值很重要。 这种迭代应该是局部收敛的,也就是初始值要离 $\pi$ 比较近。比如 $x_0=3$ 这种就比较自然。如果初值乱选,可能跑到别的根,甚至发散。 所以我不敢说它一定能超过 Chudnovsky 这种顶级公式,但从迭代法角度看,它至少是一个挺有意思的高阶构造。 --- ## 公式 公式如下: $$ x_{n+1} = x_n+ (p-1) \frac{ \left.\dfrac{d^{p-2}}{dx^{p-2}}\left(\dfrac1{\sin x}\right)\right|*{x=x_n} }{ \left.\dfrac{d^{p-1}}{dx^{p-1}}\left(\dfrac1{\sin x}\right)\right|*{x=x_n} } $$ 并猜想在合适初值下: $$ \lim_{n\to\infty}x_n=\pi $$ 其中 $p$ 越大,理论上的局部收敛阶越高。 本人初一蒟蒻,公式是闲得无聊乱推出来的。如果有大佬能严格证明它的收敛阶、收敛范围,或者指出它和已有高阶迭代法之间的关系,欢迎指教。 轻喷 qwq。