見出し画像

Pythonでモンテカルロ法

モンテカルロ法(モンテカルロ法、(: Monte Carlo method、MC)とはシミュレーション数値計算乱数を用いて行う手法の総称。元々は、中性子が物質中を動き回る様子を探るためにスタニスワフ・ウラムが考案しジョン・フォン・ノイマンにより命名された手法。カジノで有名な国家モナコ公国の4つの地区(カルティ)の1つであるモンテカルロから名付けられた。ランダム法とも呼ばれる。

https://ja.wikipedia.org/wiki/%E3%83%A2%E3%83%B3%E3%83%86%E3%82%AB%E3%83%AB%E3%83%AD%E6%B3%95

要するに、乱数を使って計算させるに手法ということです。乱数とはランダム(いろんな、無作為、適当)な数値という意味です。

さて、このモンテカルロ法で円周率の近似値を求めることができます。

確率の原理を使います。四角の中に円を書きます。その四角の中にランダムに点を打っていき、四角全体に点が打たれた中で、円の中に打たれた点の比率で円周率の近似値を求めるという方法です。

式にすると。半径1の単位円の面積とその円を内包する四角についての式は

1 * 1 * π / 2 * 2   →    π / 4 

全ての打つ点"n"に対する円に入る"m"の割合を表す式は

n / m


これらの式については

π / 4 = n / m    →  π = 4 * 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

が出てきます。実行するたびに数字は変わります。ランダムな値からの計算なので。

いいなと思ったら応援しよう!