- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2023-08-17T10:26:50+09:00","default:inoue.ko","inoue.ko")
*MonteCarloMethod
Python プログラムサンプル
~
~
**MonteCarloMethod
***モンテカルロ法で π の値を求める
円周率(π)を近似的に求めるプログラムを通して、Google Colaboratoryの使い方とPythonプログラムの書き方を体験してみましょう。
~
***ノートブックの新規作成
-ブラウザ上の Google Colaboratory で ''ファイル> ノートブックを新規作成''
-Untitled0.ipynb というファイル名を変更 > MonteCarloMethod.ipynb
~
***サンプルコード
-テキストセルを追加して、ノートの冒頭にタイトルをつけましょう。
# モンテカルロ法による円周率の導出
-コードセルに以下のコードを書いて、実行してみましょう。
# ライブラリの読み込み
import math
import random
# 初期化
n = 1000
cnt_in = 0
cnt_out = 0
# シミュレーション
for i in range(n):
# 0.0 - 1.0 のランダムな「雨粒」
x = random.random()
y = random.random()
# 4分円の中に落ちた数をカウント
r = math.sqrt(x**2 + y**2)
if r <= 1.0:
cnt_in += 1
else:
cnt_out += 1
# 円周率の近似値
Pi = cnt_in / n * 4
# 結果の表示
print("Num:", n)
print("IN:", cnt_in)
print("OUT:", cnt_out)
print("Pi:", Pi)
-n の初期値を大きくしていくと、結果が 3.14 に近づくことを確認しましょう。計算資源に負担をかけることがないよう、n の値はほどほどに・・
-プログラムの解説をテキストセルにマークダウン記法で記載して、ノートを完成させましょう。
~
***手法の解説
#image(https://upload.wikimedia.org/wikipedia/commons/c/cd/Montecarlo_pi2.PNG)
&scale(75){[[Wikimediacommons File:Montecarlo pi2.PNG>https://commons.wikimedia.org/wiki/File:Montecarlo_pi2.PNG]]};
-一辺の長さを r とする正方形の面積を S とし、その正方形の左下頂点を中心とする 半径rの4分円の面積を Q とすると
Q = π*r*r / 4
S = r*r
よって、Q / S = ( π*r*r / 4 ) / ( r*r ) = π/4
-すなわち、以下の関係式が得られます。
π = Q / S * 4
-正方形の「枠内」に一様な乱数を使って「雨を降らせる」と
正方形全体に降る雨粒の数:4分円の中に降る雨粒の数 ≒ S:Q
となり、雨粒の数が多くなれば、S:Q の比率に一致します。
-これを利用することで
π = 4分円の中に降る雨粒の数 / 正方形全体に降る雨粒の数 * 4
というかたちで、π の近似値を求めることができます。
~
~
~