Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

モンテカルロ法

Note

本章のポイント

  • モンテカルロ法の理論的背景(大数の法則、中心極限定理)と誤差評価を理解する。
  • Rustのrandクレートを用いた高品質な乱数生成と、特定の分布への変換手法を習得する。
  • 重点サンプリングによる収束の加速(分散減少法)を学ぶ。
  • マルコフ連鎖モンテカルロ法(MCMC)の基礎アルゴリズムを理解する。

モンテカルロ法 (Monte Carlo method) は、乱数を用いた試行を繰り返すことで近似解を得る数値計算手法の総称です。その名は、カジノで有名なモナコの公国モンテカルロにちなんで命名されました。

モンテカルロ法の重要性と特徴

数値微分と数値積分で学んだような台形則やシンプソン則などの決定論的な積分手法は、低次元では非常に高精度ですが、次元 が増えると計算量が のように指数関数的に増加してしまいます(次元の呪い)。

一方、独立サンプルで分散が有限な場合、モンテカルロ法の標本平均の統計誤差は試行回数 に対して で減少します。この収束率自体には格子法のような の指数的な増加は現れません。ただし、分散の大きさ、適切なサンプリング分布、有効サンプル数は、次元 や被積分関数の性質に強く依存します。そのため、以下のような現代物理学の最前線では、単純サンプリングだけでなく重点サンプリングやMCMCが重要になります。

  • 多次元積分: 統計力学における配位空間積分や量子力学の経路積分。
  • 統計物理学: 磁性体の相転移現象(イジング模型など)のシミュレーション。
  • 素粒子物理学: 格子ゲージ理論における真空期待値の計算。

参考リンク

本章の構成

  1. 乱数生成 計算の基礎となる疑似乱数の生成原理と、特定の確率分布(正規分布・指数分布など)に従う乱数の作り方を学びます。

  2. モンテカルロ積分 一様乱数を用いた基本的な積分手法と、その誤差評価(中心極限定理)について学びます。また、rayonを用いた並列化による高速化も扱います。

  3. 重点サンプリング 関数の形状に合わせてサンプリング密度を調整し、計算効率を劇的に向上させる手法を学びます。

  4. マルコフ連鎖モンテカルロ法 (MCMC) 多変数・複雑な分布を扱うための強力な枠組みである、メトロポリス法などのアルゴリズムを学びます。

作業テーマ

作業ディレクトリは ~/rust-computational-physics-work/ からの相対パスです。 ユニットテストで確認する具体的なケースは、解析解、境界条件、許容誤差の観点からAI coding agentと相談して決めます。

テーマ作業ディレクトリ構造化するコードユニットテスト演習拡張演習
乱数生成monte-carlo/random-numbersmake_rng, sample_uniform, sample_normalseed固定で同じ列が出ることを確認する分布の平均と分散をCSVに出力する
モンテカルロ積分monte-carlo/integrationmc_integrate, mean, standard_error既知積分値と標準誤差を比較する複数seedの独立試行を追加する
重点サンプリングmonte-carlo/importance-samplingsample_proposal, weight, estimate重みつき推定量の平均を確認する一様サンプリングとの分散比較を追加する
MCMCmonte-carlo/mcmcpropose, accept, measure固定seedで受理率と平均を確認するburn-inとsampling intervalをmetadataに保存する

検証と実装の観点

モンテカルロ法では、1回の実行結果だけでは精度を判断できません。乱数seed、 試行回数、独立試行、誤差棒を記録し、再実行できる形で結果を残します。

  • seedを固定した再現実行と、seedを変えた独立試行の両方を確認する。
  • 既知の期待値や分布を使い、推定値と標準誤差を比較する。
  • 重点サンプリングでは、重みの定義と分散減少を確認する。
  • MCMCでは、burn-in、sampling interval、autocorrelationを確認する。