技術(非IT系)

モンテカルロ法による円周率の求め方は?計算原理と手順を解説!(乱数・面積比・幾何学的確率・数値積分など)

当サイトでは記事内に広告を含みます

モンテカルロ法の最もわかりやすい入門例として、世界中で親しまれているのが円周率(π)の推定です。

「乱数を使って円周率を求める?どういう仕組みなの?」と不思議に思う方も多いでしょう。

実は、乱数・面積比・幾何学的確率という概念を組み合わせることで、コンピュータが円周率を統計的に近似できます。

本記事では、モンテカルロ法で円周率を求める計算原理・具体的な手順・精度の向上方法・他の数値積分への発展まで、丁寧にわかりやすく解説していきます。

プログラミング初心者や数学・物理を学んでいる方にもおすすめの内容です。

モンテカルロ法で円周率を求める原理は「面積比と確率の対応」にある

それではまず、モンテカルロ法で円周率を求める数学的な原理を解説していきます。

基本的なアイデアはシンプルです。

単位正方形(1×1の正方形)の中に均一にランダムな点を打ち、その点が四分円(半径1の円の1/4)の内側に入る割合が π/4 に近づくという事実を利用します。

円周率推定の原理:四分円の面積 = π×1²/4 = π/4、正方形の面積 = 1。したがって、ランダム点が円内に入る確率 = π/4。多数の点を打って「円内の点の割合×4 = π の推定値」となる。

正方形の中にランダムに点を打つと、その点が円の中に入る確率は「円の面積 ÷ 正方形の面積」に等しくなります。

これが幾何学的確率の考え方であり、面積比と確率を直接結びつける美しい原理です。

数式による表現

具体的な数式で表すと次のようになります。

単位正方形の範囲:(x, y) ∈ [0,1] × [0,1]

四分円の条件:x² + y² ≤ 1

円内に入る点の割合 ≈ π/4

したがって π ≈ 4 × (円内の点の数) / (全点の数)

この式が円周率の推定値を与えます。

打つ点の数を増やすほど、推定値はより真の π = 3.14159… に近づいていきます。

ただし、収束速度は O(1/√N) であり、精度を1桁上げるには点の数を100倍にする必要があります。

計算手順の詳細

実際の計算手順は非常にシンプルです。

手順1:カウンター(円内の点の数)を0に初期化する

手順2:一様乱数を2つ(x座標・y座標)生成する(範囲:[0,1])

手順3:x² + y² ≤ 1 なら、カウンターを1増やす

手順4:手順2〜3を N 回繰り返す

手順5:π ≈ 4 × カウンター / N を計算する

Pythonで実装すると数行で書けるシンプルなプログラムであり、N を10万〜100万にすれば、小数点以下2〜3桁程度の精度で π が求まります。

精度の向上方法

単純なモンテカルロ推定の精度向上には、いくつかのアプローチがあります。

まず準モンテカルロ法(Quasi-Monte Carlo)があります。

擬似乱数の代わりに「低差異列」(ハルトン列・ソボル列など)を使うと、サンプルがより均一に分布し、収束速度が改善されます。

次に層化サンプリングがあり、正方形を小さなグリッドに分割して各グリッドから均等にサンプリングすることで分散を削減します。

また、数値積分のより高精度な公式(ガウス求積など)と組み合わせる手法も有効です。

他の形状や数値積分への応用

続いては、円周率の推定からさらに発展して、一般的な数値積分へどのように応用できるかを確認していきましょう。

一般的な定積分への応用

モンテカルロ法による数値積分は、円周率の推定の自然な拡張です。

区間 [a, b] 上の関数 f(x) の積分 ∫ₐᵇ f(x)dx を求めたい場合、次のように計算できます。

∫ₐᵇ f(x)dx ≈ (b-a) × (1/N) × Σᵢ f(xᵢ)

ここで xᵢ は [a,b] 上の一様乱数

これは f(x) のサンプル平均に区間幅 (b-a) をかけたものが積分値の推定値になる

1次元では数値積分の他の手法(台形則・シンプソン則など)の方が効率的ですが、多変数積分では次元が上がるほどモンテカルロ法の優位性が増します。

高次元積分でのモンテカルロ法の強み

10次元・100次元の積分が必要な場面(統計物理・機械学習・金融など)では、決定論的な数値積分格子点が指数的に増えてしまいます。

たとえば各軸に10点の格子を使う場合、1次元では10点ですが10次元では10¹⁰=100億点が必要です。

一方、モンテカルロ法の誤差は次元数に依存しないため、高次元積分において決定的な優位性を持ちます。

これが金融工学や物理シミュレーションでモンテカルロ法が特に重宝される理由です。

体積・面積推定への応用

複雑な形状の面積・体積の推定にも同様の原理が使えます。

境界が複雑で解析的な積分が難しい領域(例:多面体の体積・分子の溶媒接触面積)でも、ランダム点のサンプリングと内外判定を繰り返すことで統計的な推定が可能です。

計算化学・コンピュータ支援設計(CAD)・地理情報システム(GIS)でも活用される実用的な手法です。

モンテカルロ法による円周率推定の限界と意義

続いては、この手法の精度的な限界と教育的・実践的な意義を確認していきましょう。

サンプル数(N) 典型的な推定誤差 計算時間(目安)
1,000 ±0.05程度 ミリ秒以下
10,000 ±0.016程度 数ミリ秒
100,000 ±0.005程度 数十ミリ秒
1,000,000 ±0.0016程度 数百ミリ秒
100,000,000 ±0.00016程度 数十秒

精度向上の難しさ

表からわかるように、1億点を使っても小数点以下4桁程度の精度しか得られません。

高精度の円周率計算には、ガウス=ルジャンドルアルゴリズムやマチンの公式などの専用アルゴリズムの方が圧倒的に効率的です。

モンテカルロ法による円周率推定は、精度を競うというより、確率的数値計算の原理を体感するための教育的な演習として最大の意義を持ちます。

プログラミング学習での活用

モンテカルロ法による円周率推定は、プログラミングの入門教材として世界中で使われています。

乱数生成・条件分岐・ループ・統計処理という基本的なプログラミング要素を自然に組み合わせて学べるためです。

Pythonコース・データサイエンス入門・数値計算の授業でも定番の演習課題であり、コードを実行して結果を見ることで、確率論の本質を直感的に理解できます。

視覚化による直感的理解

円周率のモンテカルロ推定は、結果を散布図(赤:円外・青:円内)として可視化することで、確率論・幾何学・数値計算の概念が一度に視覚的に理解できます。

Matplotlibなどのライブラリを使えば数行でアニメーションも作れるため、学習のモチベーション向上にも効果的です。

まとめ

本記事では、モンテカルロ法による円周率の求め方・計算原理・精度向上の方法・数値積分への応用について解説してきました。

面積比と幾何学的確率を組み合わせたシンプルな原理で円周率が推定できることは、確率論と数値計算の融合を象徴する美しい例です。

精度面では限界がありますが、教育的・直感的な理解を育む演習として世界中で使われており、プログラミング入門にも最適です。

さらに発展的な学習として、多次元積分・準モンテカルロ法・MCMC へと学びを広げることで、数値計算の実用的な力が身につくでしょう。