🎓 レベル:基礎 | 重要度:A(必須)
📎 関連:大数の法則と中心極限定理の役割 | モンテカルロ積分の原理
要点(BLUF)
- シミュレーションは、現象を計算機の中で再現して、解析的に解けない問題の答えを数値的に得る手法です。
- 方程式を解けば答えが一意に決まるのが決定的シミュレーション、乱数を入力して結果の分布を見るのが確率的(モンテカルロ)シミュレーション。
- 「乱数で計算する」感覚をつかむため、正方形に点をばらまいて円周率を推定します(100万点で 、誤差 0.0014)。
1. シミュレーションとは何か
シミュレーションとは、対象の系(system)を計算機の中のモデルとして表現し、それを動かして観測することです。実物で実験できない・高コスト・危険・時間がかかる——そんなときに、モデルを走らせて「もし〜だったらどうなるか」を調べます。
シミュレーションは大きく2種類に分かれます。
- 決定的(deterministic)シミュレーション:入力が決まれば出力も一意に決まる。微分方程式の数値解法(惑星の軌道、熱伝導、回路)が典型。同じ入力なら何度走らせても同じ結果。
- 確率的(stochastic)シミュレーション:入力や系の挙動に**乱数(不確実性)**が含まれる。出力は走らせるたびに変わり、結果は分布として現れる。この分布の平均・分散・分位点を読むのが目的。
本テキストが扱うモンテカルロ法は後者です。「乱数を振って、その結果を集計することで、確率・期待値・積分などを数値的に近似する」——これがモンテカルロの中核です。
2. なぜ乱数で計算できるのか
一見すると「乱数を使ったら答えがブレるだけでは?」と思えます。ところが、たくさんの乱数の平均を取ると、真の値に収束する——これが大数の法則の保証です。さらに、その収束の速さ(誤差の大きさ)は中心極限定理が と教えてくれます。
つまりモンテカルロ法は、**「求めたい量を、ある確率変数の期待値として表現し、その期待値を標本平均で近似する」**という戦略です。詳しい原理はモンテカルロ積分の原理で扱います。
3. 具体例:円周率を乱数で推定する
直観をつかむ定番例です。 の正方形の中に一様乱数で点をばらまき、原点中心の半径1の四分円(面積 )に入った割合を数えます。割合は四分円の面積比に近づくので、4倍すれば の推定になります。
import numpy as np
# 乱数シードを固定して再現性を確保する
rng = np.random.default_rng(42)
n = 1_000_000 # ばらまく点の数
points = rng.random((n, 2)) # [0,1)x[0,1) の一様乱数点
inside = (points[:, 0]**2 + points[:, 1]**2) <= 1.0 # 四分円の内側か
pi_est = 4 * inside.mean() # 内側の割合 x 4
print(f"モンテカルロによるpi推定 (n={n}) = {pi_est:.5f}")
print(f"真のpiとの絶対誤差 = {abs(pi_est - np.pi):.5f}")
出力:
モンテカルロによるpi推定 (n=1000000) = 3.14298
真のpiとの絶対誤差 = 0.00139
出力の意味:100万点で を 3.143 と推定でき、誤差は約 0.0014。点を増やせばさらに精度が上がりますが、誤差は点数 に対して でしか縮まないので、桁を1つ改善するには点を100倍にする必要があります(収束率と誤差(√n則))。これがモンテカルロの「遅いが、次元に強い」という性格の出発点です。
4. 他手法との関係
- 決定的な数値積分(台形則・シンプソン則)は、1次元なら圧倒的に速く正確です。しかし次元が上がると格子点数が指数的に爆発する(次元の呪い)。モンテカルロは誤差が次元に依らないので、高次元で逆転します(収束率と誤差(√n則))。
- 確率的シミュレーションの中身は、乱数生成(第2章 乱数生成 目次)→ 期待値の推定(第3章 モンテカルロ積分 目次)→ 誤差を減らす工夫(第4章 分散減少法 目次)という流れで体系化されます。
数式の直観的意味
で、 は「点 が四分円内なら1、外なら0」を取るベルヌーイ変数です。その期待値は (面積比)。標本平均 は大数の法則で に収束するので、。**「面積を、当たり判定の平均という期待値に翻訳した」**のがこの推定の本質で、モンテカルロ積分の最小例になっています。
⚠️ よくある誤解・落とし穴
- 「乱数だから答えが当てにならない」ではない:1回の試行は当てにならなくても、多数の平均は理論的に真値へ収束します(一致性)。問題は「収束はするが遅い」点で、そこを改善するのが分散減少法です。
- 「点を増やせば誤差は比例して減る」ではない:誤差は ではなく で縮みます。10倍精度を上げるには点を100倍に。
- 「シミュレーション=確率的」ではない:決定的シミュレーション(ODE 数値解法など)も立派なシミュレーションです。本テキストが主に扱うのが確率的(モンテカルロ)なだけです。
- 「シードを固定すると結果が偏る」ではない:シード固定は再現性のためで、統計的性質は変わりません。むしろ固定しないとデバッグも検証もできません。
対応シミュレーション参照
本文のコードがそのまま検証用シミュレーションです(np.random.default_rng(42) で再現可能)。
関連ノート
- モデル化の流れ(系・状態・入力・出力)(次のトピック・現象を計算に落とす)
- 大数の法則と中心極限定理の役割(なぜ乱数の平均が収束するか)
- モンテカルロ積分の原理(円周率推定の一般化)
- ヒット・アンド・ミス法(この当たり判定法の一般形)
- 第1章 シミュレーションの基礎 目次
- シミュレーション・モンテカルロ法 全体目次