#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 というかたちで、π の近似値を求めることができます。 ~ ~ ~