次のような形の数列の和を計算するマクロを作ります。
\[\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 の値を非常に大きくとることによって無限級数の近似値を得ることができます。
SIGMA関数
SIGMA関数のマクロは次のようになっています。
Dim z As Double, k As Integer
For k = 1 To n
z = z + k ^ s
Next k
SIGMA = z
End Function
SIGMA関数を使用するには引数に s と n の2つを指定して
のように書きます ( 55 が返ります)。
1 から 100 まで足してみましょう
1 から 100 まで順に加える
\[1+2+3++\: \cdots \:+99+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,20000) = 1.64488
SIGMA(-2,30000) = 1.64490
のようになります。真値は 1.64493 ... ですから、まずまずの精度ですね。