20日目 区分求積法【30日間1日1本マクロ生活】

30日間1日1本マクロ生活、20日目です。

ついに3分の2です。あと10日ですね。頑張ります。

マクロを書く準備は、0日目に記事を書きました。

区分求積法

今日は積分のお話です。

\displaystyle\int_0^1 \dfrac1{1+x^2}dx を計算すると、答えは \dfrac\pi4 です。

この積分の計算をここで解説するのはやめておきますね。

一方、高校の数学IIIの教科書に載っている「区分求積法」という計算法があります。

\displaystyle \lim_{n \to \infty} \dfrac1n \sum_{k=1}^n f\left( \dfrac{k}n \right) = \int_0^1 f(x)dx

というものです。

これがどういう意味なのか、ということも説明するのはやめておきますね。

いっぱい足し算したら円周率が求められる

この式の意味する所は、n がめっちゃ大きな数だったとして

\dfrac1{1+\left( \dfrac{1}n \right)^2}+\dfrac1{1+\left( \dfrac{2}n \right)^2}+\dfrac1{1+\left( \dfrac{3}n \right)^2}+\cdots +\dfrac1{1+\left( \dfrac{n}n \right)^2}

という足し算をず~~~~~~~っとやっていって、その合計をnで割ったら、計算結果が円周率 \pi の4分の1に近づいていくということなんです。

n がどのくらい大きな数かって?百万?一億?

いやいや、そんなもんじゃないです。

なんたって無限大ですから。

だから、こんな計算、人間様の「手」でできるはずないんです。

だから、こんな時こそ機械の出番です。

Excelのマクロにやってもらいましょう。

さっそくコードを


Sub 区分求積()
    s = 0
    n = 10 ^ 8
    
    For k = 1 To n
        s = s + 1 / (1 + (k / n) ^ 2)
    Next k
    
    Cells(1, 1) = 4 * s / n
End Sub

解説します。

とりあえず、n10^8 とします。1億ですね。小さい数です。

変数sに足し算の結果をどんどん追加していきます。

最後にセルA1に合計のsを4倍してnで割ったものを表示します。

上手くいけば、これが \pi に近い値になるはずです。

実行結果

マクロを記述するウィンドウの「Sub」と「End Sub」の間にカーソルを置いて、画面上方の再生ボタン的なアイコン(右向きの三角形)をクリックするか、[F5]キーを押して実行します。

いやあ、nがたったの1億なのに、かなりの精度ですね。

3.141592644ですよ。

わたしが覚えている円周率は3.14159265358979323ですから、小数第7位まで合ってますよ。

正直、nがたった1億でここまで合うと思っていなかったので、かなり驚いています。はい。

ただ、1億もの項の計算、人間の手では無理ですよね。さすがExcelです。

Excelは便利

悔しいですが、Excelは便利です。

Microsoftにお金を払うのは癪でしょうがないんですが、Excelばかりは仕方がない。

マクロを書くようになると、Excelからは離れられないですね。

30日間、残り10日です。頑張ります。