SIGMA関数を作って級数を計算し、バーゼル問題に迫ります

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 までの2乗和を計算します:
 
\[\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 までの逆2乗和を計算します:
 
\[\sum_{k=1}^n \frac{1}{k^2}=1+\frac{1}{2^2}+\frac{1}{3^2}+\: \cdots +\: \frac{1}{n^2}\]
 このように s に対応して様々な数列の和を計算することができます。
 級数の部分和を計算しているわけですが、n の値を非常に大きくとることによって無限級数の近似値を得ることができます。このような級数を計算するマクロは次のようになります。

'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 → ∞ とした逆2乗和
 
\[\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 ... ですから、まずまずの精度ですね。


 

コメントをどうぞ

メールアドレスが公開されることはありません。