ガウス=ルジャンドルのアルゴリズム

提供: testwiki
ナビゲーションに移動 検索に移動

テンプレート:出典の明記 ガウス=ルジャンドルのアルゴリズムテンプレート:Lang-en)は、円周率を計算する際に用いられる数学の反復計算アルゴリズムである。円周率を計算するものの中では非常に収束が速く、2009年にこの式を用いてテンプレート:Math桁(約テンプレート:Mathテンプレート:Math億桁)の計算がなされた[1]

このアルゴリズムはカール・フリードリヒ・ガウスアドリアン=マリ・ルジャンドルがそれぞれ別個に研究したものである。これはテンプレート:Mathつの数値の算術幾何平均を求めるために、それぞれの数値を算術平均(相加平均)と幾何平均(相乗平均)で置き換えていくものである。

アルゴリズム

これによる円周率の計算方法は以下の通りである。

初期値の設定

a0=1b0=12t0=14p0=1

反復式

テンプレート:Math が希望する精度(桁数)になるまで以下の計算を繰り返す。小数第テンプレート:Math位まで求めるとき テンプレート:Math 回程度の反復でよい。

an+1=an+bn2bn+1=anbntn+1=tnpn(anan+1)2pn+1=2pn

円周率 テンプレート:Π は、テンプレート:Math を用いて以下のように近似される。

π(a+b)24t

最初の3回の反復で得られる数値(最後の桁は真値とは異なる)は以下の通りである。

3.140 (小数点以下テンプレート:Math桁目までが正しい)
3.14159264 (小数点以下テンプレート:Math桁目までが正しい)
3.1415926535897932382(小数点以下テンプレート:Math桁目までが正しい)

この計算過程は二次収束する。つまり反復のたびに正しい桁数が直前のもののほぼテンプレート:Math倍になるのである。ガウス自身もこの式を用いて反復をテンプレート:Math回まで行ってテンプレート:Math桁まで正しいことを確認したことが知られている。

Python3による実装例

#!/usr/bin/python3
import sys
from decimal import *

def picalc():
  a = Decimal(1)
  b = Decimal(1) / Decimal(2).sqrt()
  t = Decimal(1) / Decimal(4)
  p = Decimal(1)
  r = Decimal(0)
  rn = Decimal(3)
  while r != rn:
    r = rn
    an = (a + b) / 2
    bn = (a * b).sqrt()
    tn = t - p * (a - an) * (a - an)
    pn = 2 * p
    rn = ((a + b) * (a + b)) / (4 * t)
    a = an
    b = bn
    t = tn
    p = pn
  return rn

if __name__ == "__main__":
  if len(sys.argv) < 2:
    getcontext().prec = 10000
  else:
    try:
      getcontext().prec = int(sys.argv[1])
    except:
      print("引数が不正です。桁数を数値で指定して下さい。")
      sys.exit(1)
  print(picalc())

数学的背景

算術幾何平均

二つの数a0,b0算術幾何平均とは、数列

an+1=an+bn2, bn+1=anbn

の極限のことである。両数列は同一の極限値を持つ。

a0=1, b0=cosφのとき、算術幾何平均はπ2K(sinφ)となる。ここで、K(k)第一種完全楕円積分である。また、c0=sinφかつci+1=aiai+1なる数列について、

i=02i1ci2=1E(sinφ)K(sinφ)

が成立する。ここで、E(k)第二種完全楕円積分である。

ガウスはこれらの結果を知っていたとされる[2][3][4]

ルジャンドル恒等式

φ+θ=π2なるφ,θについて、ルジャンドルは次の恒等式を得た。

K(sinφ)E(sinθ)+K(sinθ)E(sinφ)K(sinφ)K(sinθ)=π2.

この式は、任意のφについて、以下のようにも書き表すことができる。

K(sinφ){E(cosφ)K(cosφ)}+K(cosφ)E(sinφ)=π2.

初等的な証明

ガウス=ルジャンドルのアルゴリズムは楕円モジュラー関数を用いずに示すこともできる。初等的な積分を用いた証明が Lord (1992)[5]、Milla (2019)[6] によりなされている。

脚注

テンプレート:脚注ヘルプ テンプレート:Reflist

関連項目

テンプレート:Mathanalysis-stub

  1. テンプレート:Cite press release
  2. テンプレート:Cite book
  3. テンプレート:Cite journal
  4. Salamin, Eugene, Computation of pi, Charles Stark Draper Laboratory ISS memo 74–19, 30 January 1974, Cambridge, Massachusetts
  5. テンプレート:Cite journal
  6. Milla, Lorenz (2019), Easy Proof of Three Recursive π-Algorithms, arXiv:1907.04110