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

 次のような形の数列の和を計算するマクロを作ります。
\[\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関数のマクロは次のようになっています。

 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関数を使用するには引数に s と n の2つを指定して

=SIGMA(1,10)

のように書きます ( 55 が返ります)。
 

1 から 100 まで足してみましょう

 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 ... ですから、まずまずの精度ですね。

 ≫ VBA 数学マクロ

スポンサーリンク
スポンサーリンク
末尾広告
末尾広告

コメントをどうぞ

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください