Python

モンテカルロ法を用いて円周率をPythonで近似計算する

どうも(^^)/

あまり使う機会がないですがPythonを用いて、円周率を計算したいと思います。

 

本日の内容
モンテカルロ法を用いて円周率をPythonで計算してみる

 

お遊びですので、Pythonコードもちょちょいって感じで作ってみました。

 

内容はこちらの本に書いてあったので紹介したいと思います。

スポンサーリンク

モンテカルロ法とは

 

モンテカルロ法 とはシミュレーションや数値計算を乱数を用いて行う手法の総称のことです。

(例が思いついたら追記します)

 

モンテカルロ法を用いて円周率を近似してみよう

 

数値計算での考え方は、まず一辺が長さ\(a\)の正方形を用意します。

そこに、

  • 0~1の値をランダムにm個の点を打っていきます。

そうすると、数密度が

\begin{align*}
\rho_{a}=\frac{m}{a^{2}}\tag{1}
\end{align*}

となります。

 

次に、

  • 半径\(a\)の1/4円を用意して、先ほどの点の内、1/4円に入った数をカウントします。

1/4円に入った数が\(n\)個なら、数密度は

\begin{align*}
\rho_{c}=\frac{n}{\pi a^{2}/4}\tag{2}
\end{align*}

となります。

 

乱数を用いているので、点を一様に配置してくれるとすると数密度は両者で同じです。

\begin{align*}
\rho_{a}=\rho_{c}\tag{3}
\end{align*}

 

なので、(1)(2)式より、

\begin{align*}
\pi=4\frac{n}{m}\tag{4}
\end{align*}

 

と、円周率が近似的に求まることがわかりました。

 

以上の流れをまとめると・・・

 

乱数で点を打ちつけていく数が多ければ多いほど、円周率に近づきそうです。

円周率をPythonを用いて近似してみる

 

では、先ほど説明した内容でアルゴリズムを書いていきましょう。

乱数の数は最大で\(m=1000\)にしておきます。

 

 

結果

  • 横軸:乱数(点を打った数)
  • 縦軸:円周率の近似式\(4\frac{n}{m}\)

オレンジの実線が真の円周率の値です。

 

最大で乱数の数を1000個にまで計算させました。

乱数の数が多いと、真の円周率の値に近づいていっているのがわかります。

 

 

関連記事もどうぞ

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です