AGM函数近似值的估计
AGM是 Arithmetic-Geometric Mean的缩写,意为算术几何 平均数。其定义为,给定两个正实数a0和b0,我们定义一个迭代过程
ai+1=ai+bi2, bi+1=aibi a_{i+1}= \frac {a_i+b_i} {2}, \ \ \ b_{i+1}= \sqrt {a_i b_i } ai+1=2ai+bi, bi+1=aibi
前者求两个数的算术平均数,后者求2个数的几何平均数。这两个序列有同样的极限,其值表示为A(a0,b0),在AGM迭代过程中,序列收敛地非常快,一旦aia_iai 和bib_ibi大小相近时,每迭代一次,有效数字加倍。下表显示了这两个序列的收敛速度[1]
| n | an | gn |
|---|---|---|
| 0 | 24 | 6 |
| 1 | 15 | 12 |
| 2 | ||
| 3 | ||
| 4 | ||
| 5 |
高斯发现,AGM函数可以用来求椭圆积分的值,
A(1,x)=π2F(x) A(1,x)= \frac{\pi} {2F(x)} A(1,x)=2F(x)π
F(x)为椭圆积分函数
∫0π2dθ1−(1−x2)sin2θ \int_0^{\pi \over 2} \frac{d\theta} { \sqrt {1-(1-x^2 ) \sin^2 \theta}} ∫02π1−(1−x2)sin2θdθ
AGM函数不但可以快速的计算椭圆积分,也可用来计算对数函数ln(x)ln(x)ln(x). [2]给出一个椭圆积分F(x)F(x)F(x)和对数函数ln(s)ln(s)ln(s)的关系式
F(4s)=ln(s)+4ln(s)−4s2+36ln(s)−42s4+1200ln(s)−14803s6+O(1s8)
F(\frac{4}{s})=\ln(s)+ \frac{4\ln(s)-4}{s^2}+\frac{36\ln(s)-42}{s^4} + \frac{1200 \ln(s)-1480}{3s^6} + O(\frac{1}{s^8}) F(s4)=ln(s)+s24ln(s)−4+s436ln(s)−42+3s61200ln(s)−1480+O(s81)
如果s是足够的大,F(4/s)F(4/s)F(4/s)是非常好的ln(s)ln(s)ln(s)的近似值。为了计算ln(s)ln(s)ln(s)到p位2进制数。s必须大于 2p22^{ p \over 2 }22p 。故为了计算ln(x)ln(x)ln(x),我们首先需要找到一个实数s和整数m,使得s=x⋅2m>2p2 s=x \cdot2^m \gt 2^{p \over 2} s=x⋅2m>22p [2]给出如下求ln(x)的公式
ln(x)=π2A(4s,1)−mln(2) (1) ln(x)=\frac{\pi}{2A({4 \over s},1)} -m \ln (2) \ \ \ \ (1)ln(x)=2A(s4,1)π−mln(2) (1)
我们将这个公式稍作一下变形 ln(x)=18πsA(s4,1)−mln(2)=12π⋅x⋅2m−2A(x⋅2m−2,1)−mln(2) (2)
\ln(x)=\frac{{1 \over 8}\pi s}{A({s \over 4},1)} -m \ln (2)= \frac{{1 \over 2}\pi \cdot x \cdot 2^{m-2}}{A(x \cdot 2^{m-2},1)} - m \ln(2)
\ \ \ \ \ \ (2) ln(x)=A(4s,1)81πs−mln(2)=A(x⋅2m−2,1)21π⋅x⋅2m−2−mln(2) (2)
反过来,利用这个公式,我们可以求AGM(1,y)的近似值,这里要求y>>1。在公式(2)中,我们取x为1,这样不但可以消去方程中的x,也可以消去ln(x),这样公式(2)变为
12π⋅2m−2A(2m−2,1)=mln(2) (3) \frac {{1 \over 2} \pi \cdot 2^{m-2}}{A(2^{m-2},1)}=m \ln(2) \ \ \ \ \ (3)A(2m−2,1)21π⋅2m−2=mln(2) (3)
令 y=2m−2y=2^{m-2}y=2m−2, 则
a(y,1)=12π⋅y(log2(y)+2)ln2=y12π/ln(2)log2(y)+2≈y2.26618007091log2(y)+2 (4) a(y,1)= \frac { {1 \over 2} \pi \cdot y} {(log2(y)+2) \ln 2} = y \frac{{1 \over 2} \pi / \ln(2)}{log2(y)+2} \approx y \frac{2.26618007091}{log2(y)+2} \ \ \ \ \ \ \ \ (4) a(y,1)=(log2(y)+2)ln221π⋅y=ylog2(y)+221π/ln(2)≈ylog2(y)+22.26618007091 (4)
下表是y取某些值时,使用公式(4)得到的近似值和真实值的对比。我们可以发现,当y>10,这个近似公式可以精确到3位以上有效数字。
| y | A(y,1) | 公式(4) |
|---|---|---|
| 10 | ||
| 2^4 | ||
| 2^6 | ||
| 2^8 | ||
| 2^16 | ||
| 2^24 | ||
| 2^32 |
参考文献
[1] agm(24, 6) at WolframAlpha. http://www.wolframalpha.com/input/?i=agm%2824%2C+6%29
[2] Muller J M. Elementary Functions: Algorithms and Implementation[M]. Springer Science+Business Media New York, 2016,130-131

642

被折叠的 条评论
为什么被折叠?



