【VBA】バーゼル問題 (逆二乗和の収束値)

 スマホ等をご使用の場合、長い数式が端で切れて見えることがありますが、数式に指を触れて横にスクロールすると閲覧できます。

 この記事では、VBA で 逆二乗和 の収束値を計算し、バーゼル問題 に迫ってみます。

【VBA】バーゼル問題に迫ります

 次のような形の数列の和(級数)を計算する VBA マクロを作ります。
 
\[\sum_{k=1}^n k^s=1+2^s+3^s+\: \cdots \:+n^s\]
 $s=1$ のとき $1$ から $n$ までの数字の和を計算します:
 
\[\sum_{k=1}^n k=1+2+3+\: \cdots \:+n\]
 $s=2$ のとき $1$ から $n$ までの二乗和を計算します:
 
\[\sum_{k=1}^n k^2=1+2^2+3^2+\: \cdots \:+n^2\]
 $s=-1$ のとき調和数を計算します:
 
\[\sum_{k=1}^n \frac{1}{k}=1+\frac{1}{2}+\frac{1}{3}+\: \cdots +\: \frac{1}{n}\]
 $s=-2$ のとき $1$ から $n$ までの逆二乗和を計算します:
 
\[\sum_{k=1}^n \frac{1}{k^2}=1+\frac{1}{2^2}+\frac{1}{3^2}+\: \cdots +\: \frac{1}{n^2}\]
 このように $s$ に対応して様々な数列の和を計算することができます。級数の部分和を計算しているわけですが、$n$ の値を非常に大きくとることによって無限級数の近似値を得ることができます。このような級数を計算する Function Macro は次のようになります。

'[VBA] 級数を計算するユーザー定義関数
Function SIGMA(s As Double, n As Integer) As Double
  Dim z As Double, k As Integer
  For k = 1 To n
    z = z + k ^ s
  Next k
  SIGMA = z
End Function

 級数関数SIGMAを使って、$1$ から $100$ まで順に加える級数
 
\[1+2+3++\: \cdots \:+99+100\]
を計算させてみましょう。セルに

=SIGMA(1,100)

と入力してください。5050 が返るはずです。
 
 さて、$s = -2,\ n \rightarrow \infty$ とした逆二乗和
 
\[\sum_{k=1}^{\infty} \frac{1}{k^2}\]
の収束値を求める問題を バーゼル問題 と呼びますが、大数学者のオイラーによって
 
\[\sum_{k=1}^{\infty} \frac{1}{k^2}=\frac{\pi^2}{6}\]
であることが証明されています。SIGMA関数でどこまでこの値に迫れるか試してみましょう。エクセルのシート上で SIGMA(-2,n) の値を計算させると、

SIGMA(-2,10000) = 1.64483
SIGMA(-2,20000) = 1.64488
SIGMA(-2,30000) = 1.64490

のようになります。真値は 1.64493 … ですから、まずまずの精度ですね。

【おすすめ記事】 ≫ ライプニッツの公式

 

コメント

タイトルとURLをコピーしました