モンテカルロ法
Note
本章のポイント
- モンテカルロ法の理論的背景(大数の法則、中心極限定理)と誤差評価を理解する。
- Rustの
randクレートを用いた高品質な乱数生成と、特定の分布への変換手法を習得する。- 重点サンプリングによる収束の加速(分散減少法)を学ぶ。
- マルコフ連鎖モンテカルロ法(MCMC)の基礎アルゴリズムを理解する。
モンテカルロ法 (Monte Carlo method) は、乱数を用いた試行を繰り返すことで近似解を得る数値計算手法の総称です。その名は、カジノで有名なモナコの公国モンテカルロにちなんで命名されました。
モンテカルロ法の重要性と特徴
数値微分と数値積分で学んだような台形則やシンプソン則などの決定論的な積分手法は、低次元では非常に高精度ですが、次元 が増えると計算量が のように指数関数的に増加してしまいます(次元の呪い)。
一方、独立サンプルで分散が有限な場合、モンテカルロ法の標本平均の統計誤差は試行回数 に対して で減少します。この収束率自体には格子法のような の指数的な増加は現れません。ただし、分散の大きさ、適切なサンプリング分布、有効サンプル数は、次元 や被積分関数の性質に強く依存します。そのため、以下のような現代物理学の最前線では、単純サンプリングだけでなく重点サンプリングやMCMCが重要になります。
- 多次元積分: 統計力学における配位空間積分や量子力学の経路積分。
- 統計物理学: 磁性体の相転移現象(イジング模型など)のシミュレーション。
- 素粒子物理学: 格子ゲージ理論における真空期待値の計算。
参考リンク
本章の構成
-
乱数生成 計算の基礎となる疑似乱数の生成原理と、特定の確率分布(正規分布・指数分布など)に従う乱数の作り方を学びます。
-
モンテカルロ積分 一様乱数を用いた基本的な積分手法と、その誤差評価(中心極限定理)について学びます。また、
rayonを用いた並列化による高速化も扱います。 -
重点サンプリング 関数の形状に合わせてサンプリング密度を調整し、計算効率を劇的に向上させる手法を学びます。
-
マルコフ連鎖モンテカルロ法 (MCMC) 多変数・複雑な分布を扱うための強力な枠組みである、メトロポリス法などのアルゴリズムを学びます。
作業テーマ
作業ディレクトリは ~/rust-computational-physics-work/ からの相対パスです。
ユニットテストで確認する具体的なケースは、解析解、境界条件、許容誤差の観点からAI coding agentと相談して決めます。
| テーマ | 作業ディレクトリ | 構造化するコード | ユニットテスト演習 | 拡張演習 |
|---|---|---|---|---|
| 乱数生成 | monte-carlo/random-numbers | make_rng, sample_uniform, sample_normal | seed固定で同じ列が出ることを確認する | 分布の平均と分散をCSVに出力する |
| モンテカルロ積分 | monte-carlo/integration | mc_integrate, mean, standard_error | 既知積分値と標準誤差を比較する | 複数seedの独立試行を追加する |
| 重点サンプリング | monte-carlo/importance-sampling | sample_proposal, weight, estimate | 重みつき推定量の平均を確認する | 一様サンプリングとの分散比較を追加する |
| MCMC | monte-carlo/mcmc | propose, accept, measure | 固定seedで受理率と平均を確認する | burn-inとsampling intervalをmetadataに保存する |
検証と実装の観点
モンテカルロ法では、1回の実行結果だけでは精度を判断できません。乱数seed、 試行回数、独立試行、誤差棒を記録し、再実行できる形で結果を残します。
- seedを固定した再現実行と、seedを変えた独立試行の両方を確認する。
- 既知の期待値や分布を使い、推定値と標準誤差を比較する。
- 重点サンプリングでは、重みの定義と分散減少を確認する。
- MCMCでは、burn-in、sampling interval、autocorrelationを確認する。