Pythonでモンテカルロ法を用いた円周率の計算
import numpy as np
import math
N = 100000 # 繰り返し回数
cnt = 0 # 円内にある点の個数
for _ in range(N):
x = np.random.uniform(-1, 1)
y = np.random.uniform(-1, 1)
d = math.sqrt(x**2 + y**2)
if d <= 1.0:
cnt += 1
p = cnt / N
pi = p * 4
print(pi)
このスクリプトでは、N回の繰り返しでランダムな点を生成し、その点が半径1の円内にあるかどうかを判定しています。最後に、円内にある点の割合から円周率を推定し、結果を表示します。
コードの説明:
import numpy as np: NumPyライブラリをインポートします。NumPyは数値計算に役立つライブラリです。import math: mathライブラリをインポートします。mathライブラリは数学的な関数を提供します。N = 100000: 繰り返し回数を定義します。cnt = 0: 円内にある点の個数を初期化します。for _ in range(N): N回繰り返すループです。x = np.random.uniform(-1, 1): -1から1までの範囲でランダムなx座標を生成します。y = np.random.uniform(-1, 1): -1から1までの範囲でランダムなy座標を生成します。d = math.sqrt(x**2 + y**2): 原点からの距離を計算します。if d <= 1.0: 距離が1以下であれば、点は円内にあることを意味します。cnt += 1: 円内にある点の個数をインクリメントします。p = cnt / N: 円内にある点の割合を計算します。pi = p * 4: 円周率を推定します。print(pi): 推定された円周率を表示します。
このスクリプトは、モンテカルロ法と呼ばれる手法を使用して円周率を推定しています。モンテカルロ法は、ランダムなサンプリングを使用して問題を解く手法です。このスクリプトでは、ランダムな点を生成し、その点が円内にあるかどうかを判定することで、円周率を近似しています。繰り返し回数を増やすことで、推定の精度を高めることができます。
原文地址: https://www.cveoy.top/t/topic/dXcv 著作权归作者所有。请勿转载和采集!