Pythonでモンテカルロ法
要するに、乱数を使って計算させるに手法ということです。乱数とはランダム(いろんな、無作為、適当)な数値という意味です。
さて、このモンテカルロ法で円周率の近似値を求めることができます。
確率の原理を使います。四角の中に円を書きます。その四角の中にランダムに点を打っていき、四角全体に点が打たれた中で、円の中に打たれた点の比率で円周率の近似値を求めるという方法です。
式にすると。半径1の単位円の面積とその円を内包する四角についての式は
全ての打つ点"n"に対する円に入る"m"の割合を表す式は
これらの式については
が成り立ちます。これを使ってPythonで実装します。
import random
ciecleIn = 0 #円の中に入ってくる点の数
n = 1000000 #実行する回数
for i in range(n):
x = random.uniform(0, 1)
y = random.uniform(0, 1) #ランダムな数字 (0から1の間)
hit = x**2 + y**2 #円の中に入っているかの判定
if hit <= 1:
ciecleIn += 1 #上の計算式で円の中と判定されれば1加算
pi = ciecleIn / n * 4 #πの近似値を求めます。
print(pi)
これで近似値
3.141752
が出てきます。実行するたびに数字は変わります。ランダムな値からの計算なので。