Help us understand the problem. What is going on with this article?

モンテカルロ法をPythonでシミュレーションする

モンテカルロ法とは

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

引用 wikipedia

要するに乱数を用いて数値計算を行う手法の一つです。

円周率を求める

1、正方形の中にランダムに点を打っていく
2、生成した点と原点の距離が1以下なら円の内部に入ったとカウント、1以上なら円の外部に入ったとカウントしていきます。
3、1,2をN回繰り返す
4、4P/Nが円周率の近似値であるπになる。

生成した点と原点の距離が1以下かどうかの長さを図るためにユークリッドノルム

\sqrt{x^2+y^2}

で計算します。ユークリッド距離は人が定規で測る様な二点間の通常の距離のことです。

#モジュールをインストール
import numpy as np
import math
import matplotlib.pyplot as plt

#円の中に入ったxとy
inside_x = []
inside_y = []

#円の外に出たxとy
outside_x = []
outside_y = []

count_inside = 0
for count in range(0, N):
  d = math.hypot(x[count], y[count])
  if d <1:
    count_inside +=1
    #円の内部に入った時のxとyの組み合わせ
    inside_x.append(x[count])
    inside_y.append(y[count])
  else:
    outside_x.append(x[count])
    outside_y.append(y[count])
print('円の内部に入った数:', count_inside)

出力

円の内部に入った数: 7875

可視化する


#図のサイズ
plt.figure(figsize=(5,5))

#円を描くためのデータ
circle_x = np.arange(0,1,0.001)
circle_y = np.sqrt(1 - circle_x * circle_x)

#円を描く
plt.plot(circle_x, circle_y)

#円の中に入っているのが赤
plt.scatter(inside_x, inside_y, color = 'r')
#円の外に出たのが青
plt.scatter(outside_x, outside_y, color = 'b')
#名前をつける
plt.xlabel('x')
plt.ylabel('y')
plt.grid(True) #格子をありにする

download.png

#半径1の円の四等分された単位円の面積であるので
print('円周率の近似値:'4.0 * count_inside / N)
出力
円周率の近似値: 3.144

まとめ

モンテカルロ法は点を打つ回数を増やせば増やすほど精度が上がりますが、実行にかかる時間が長くなってしまいます

daichi_shika
2021年から東京の東証一部独立系SEで勤務予定
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした