
モンテカルロ・シミュレーションをエクセルでやってみよう!

かっこいい!技の名前みたい!
モンテカルロ・シミュレーションとは
モンテカルロ・シミュレーションとは何かウィキペディアによると次のように記載されています。
モンテカルロ法とはシミュレーションや数値計算を乱数を用いて行う手法の総称
モンテカルロ法 – Wikipedia
つまり、簡単に言えばPCに何度も同じ計算をさせて近似値を予想しようというものです。
今回はエクセルの乱数を使ったモンテカルロ・シミュレーションによって円周率の近似値を求めたいと思います。
シミュレーション結果
まずは1,000回と10,000回試行したとき円周率の計算結果です。
1,000回試行したとき


10,000回試行したとき



キモッ!
結果は3.172と3.1516でした。円周率の真の値は約3.141592…なのでなかなか良い精度です。
一万回の方が精度が高いですね。
前提条件の整理
コンセプト
近似値計算の考え方をご説明します。
図のように正方形と円を描いた紙を用意します。この上にランダムに鉛筆を落とします。

ランダムに落とすので正方形の中のどこに落ちるかはわからず、確率は常に一定です。
これを何回も繰り返します。

例えば100回落としたとします。
このとき円が大きければ大きいほど落ちる鉛筆は円の中に入りやすくなります。
つまり「円の大きさ」と「円の中のマークの数」は比例(連動)しています。
同じように、「正方形の大きさ」と「正方形の中のマークの数」は比例(連動)します。
- 「円の大きさ」と「円の中のマークの数」は比例する
- 「正方形の大きさ」と「正方形の中のマークの数」は比例する

「比例」とは連動しているということ。一方が大きくなれば片方も大きくなるし、一方が小さくなれば片方も小さくなる関係のことだよ。
「円の大きさ」と「正方形の大きさ」は公式を使って求めてみましょう。
半径が1のとき、円の面積は円周率、正方形の面積は4になります。

半径が1の円の場合
- 円の面積・・・円周率
- 正方形の面積・・・4
そして「円の中のマークの数」と「正方形の中のマークの数」はひとつずつ数えることで知ることができますね。
仮に、100回鉛筆を落としたら75回円の中に入ったとしましょう。
上のチェックポイント①と②から次の比の関係が成り立ちます。

この比例の式は次のように方程式にして解くことができます。
次のように比例の関係式から方程式を解くと円周率は3と導くことができました。

このようにしてランダムに落とした鉛筆がいくつ円の中に入ったかを数えることによって円周率の近似値を導くことができます。
エクセルでの乱数発生
乱数発生にはエクセルではRAND関数(ランド関数)を使用します。
=rand()と入力すると0~1までの一様乱数を表示します。再計算するために値が変わります。

これを2つ用意してX座標とY座標として扱います。

[挿入]から[散布図]を選択することでグラフとプロット点を作成することができます。

円の中か外か判定する方法
紙と鉛筆の場合は愚直に数えて数を把握することにしていましたが、座標の数値があるので計算で求めます。
このプロット点について原点からの距離を図の公式を使って計算します。
公式は直角三角形の斜辺の長さrを求める三平方の定理を使った場合と同じです。
円周は距離が1である点の集合なので、乱数で発生させた距離が1より大きいか小さいかによって円の中か外か判定できます。


原点からの距離によって円の中か外かを判定する
- 距離が1以内・・・円の中
- 距離が1より大きい・・・円の外
下のエクセルでは距離を計算して、円の中つまり1以下のものを判定が”1”になるようにしています。(円の外つつまり1より大きい場合は”0”となります。)



準備が整ったよ!
モンテカルロ・シミュレーションを行う
実際に円周率を計算する
A列に試行回数を追加して、データ数を100まで増やします。
そしてG列~I列に円、正方形、円周率の欄を追加します。
- 円…「円の中のマークの数」をカウントしています。E列の判定が1のものを数えるためSUM関数を使っています。
- 正方形…「正方形の中のマークの数」をカウントしています。試行回数と同じ値です。COUNTA関数でE列のデータの数を数え1行目の「判定」分をマイナス1しています。
- 円周率…先ほどの比例関係の式から、円周率は「円の中のマークの数」÷「正方形の中のマークの数」×4となります。


円周率3.04が計算できたよ!
図を作ってみよう
見た目にも楽しめるように図を作ってみましょう。
②メニューバーの「挿入」をクリック。
③「散布図」をクリック。
④線のないものをクリック。
⑤図が挿入されます。

挿入された図を見やすくします。


これで完成です。
F9キーを押すたびに乱数が再計算されるのでグラフが変わります。
図を2色にする
図を色分けする散布図の作り方をご紹介します。
M~N列に表示されます。

グラフの上で右クリックして、「データの選択」をクリックします。







これで完成です。
円周率は3.2でした。100回なので図に円の形が見えませんね。件数を増やしてみましょう。
試行回数を増やす
試行回数1,000回の場合
かなりはっきりしてきました。円周率も3.184といい線いっています。


試行回数5,000回の場合
ほぼ完全に円の形が見えます。円周率は3.1672と先ほどより精度が上がっています。


ここでマーカーがつぶれてきたので色をグラデーションに変えてみます。

試行回数10,000回の場合
グラフはかなりぎゅうぎゅうです。円周率は3.1336とかなりの精度です。


試行回数50,000回の場合
グラフの見た目は10,000回とほとんど変わらなくなりました。円周率は3.1416とほとんど誤差がありません。


試行回数1,000,000回の場合
一気に夢の100万回到達です。グラフの見た目はほとんど変わりません。円周率は3.142472と5万回より精度がやや下がりました。



試行回数を増やすと計算に時間がかかるから気をつけてね!
まとめ
いかがだったでしょうか。
今回はモンテカルロシミュレーションによる円周率の近似値計算をエクセルで実践してみました。
円周率に関しては5万回程度試行すれば相当な精度が出ることが証明できましたね。
モンテカルロ・シミュレーションは金融工学における時価計算手法としても一般的です。
難しい理論も実際に自分の手と目で体験するとよくわかるようになるので丁寧に解説したつもりです。
気になることがあればコメントからお知らせください。
それでは引き続き一緒にがんばりましょう!

ナイス!
コメント