モンテカルロ法による円周率の計算 - Pythonスクリプト
モンテカルロ法による円周率の計算 - Pythonスクリプト
このスクリプトは、モンテカルロ法を用いて円周率を計算します。
手順
- -1 から 1 までの範囲の一様乱数を発生させ、x に代入します。
- -1 から 1 までの範囲の一様乱数を発生させ、y に代入します。
- x と y を2次元平面上の点の座標とすると、その点の原点からの距離 d は以下の式で計算できます。
d = math.sqrt(x**2 + y**2)
- 上記の処理を N 回繰り返し、d が 1.0 以下であった回数をカウントします。N は 10 万以上とします。
- 生成された点 (x, y) が原点を中心とした半径 1 の円の中にある確率 p を以下のように求めます。
p = cnt / N
- 点 (x, y) は、一辺が 2 (-1 から +1) の正方形の範囲にあります。このことを踏まえて、以下のように円周率 pi を計算します。
pi = p * 4
コード
# st00001, Name
import numpy as np
import math
N = 100000
cnt = 0
for i in range(N):
x = np.random.rand() * 2 - 1
y = np.random.rand() * 2 - 1
d = math.sqrt(x**2 + y**2)
if d <= 1.0:
cnt += 1
p = cnt / N
pi = p * 4
print(pi)
実行結果
3.14168
解説
このスクリプトでは、まず numpy ライブラリと math ライブラリをインポートします。次に、乱数の発生回数 N を 10 万に設定します。
for ループで N 回繰り返し、乱数を発生させ、原点からの距離を計算します。距離が 1.0 以下であれば、円内に含まれると判定し、カウント値 cnt を 1 増やします。
ループ終了後、円内に含まれる確率 p を計算し、円周率 pi を求めます。
実行結果として、円周率の近似値が表示されます。
注意
モンテカルロ法は、確率的なアルゴリズムであるため、実行するたびに結果が少し異なります。しかし、試行回数を増やすことで、より正確な値に近づきます。
応用
モンテカルロ法は、円周率の計算以外にも、様々な問題を解くために使用できます。例えば、積分や微分方程式の解を求める、シミュレーションを行う、などがあります。
原文地址: http://www.cveoy.top/t/topic/dW4F 著作权归作者所有。请勿转载和采集!