Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

古典力学シミュレーション

Important

この章を読む前に

この章を読むには、以下の章を先に読んでおく必要があります。

物理シミュレーションにおいて、最も基本的かつ直感的なのが古典力学 (Classical Mechanics) のシミュレーションです。 粒子の動きを追跡することは、惑星の軌道計算から気体分子の運動、さらには銀河の形成に至るまで、あらゆるスケールの現象理解の基礎となります。

数学的には、これはニュートンの運動方程式を数値的に解くことに他なりません。

本章では、常微分方程式で学んだ解法を物理の問題に応用し、さらに物理系特有の性質(エネルギー保存則など)に適した高度なアルゴリズムへと発展させていきます。

本章の構成

  1. 質点系の運動 運動方程式を数値計算に適した1階の連立微分方程式に変換する方法と、基本的な空気抵抗のある落体のシミュレーションを行います。

  2. シンプレクティック積分法 標準的なルンゲ=クッタ法が抱える「エネルギー保存の破れ」という問題を指摘し、長時間の安定計算を可能にするシンプレクティック積分(オイラー・クローマー法、速度ベレ法)を導入します。

  3. 惑星運動(ケプラー問題) 万有引力を受けて運動する惑星の軌道を計算します。ここで ndarray クレートを用いたベクトル演算の実装方法を学び、シンプレクティック積分の威力を確認します。

  4. 分子動力学入門 多数の粒子が相互作用する多体系のシミュレーション(分子動力学法)を構築します。周期境界条件やレナード・ジョーンズ・ポテンシャルの実装を通じて、実践的な物理シミュレーションの基礎を固めます。

作業テーマ

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

テーマ作業ディレクトリ構造化するコードユニットテスト演習拡張演習
質点系の運動classical-mechanics/particle-motionforce, state_derivative, rk4_step空気抵抗なしの放物運動を解析解と比較する軌道をCSVに出力する
シンプレクティック積分classical-mechanics/symplecticeuler_cromer_step, velocity_verlet_step, energy調和振動子でエネルギーの変化を確認するEuler法と長時間安定性を比較する
Kepler問題classical-mechanics/kepleracceleration, energy, angular_momentum, step_verlet円軌道のエネルギーと角運動量を確認する軌道と保存量をCSVに出力する
分子動力学classical-mechanics/molecular-dynamicsminimum_image, pair_force, compute_forces, kinetic_energy周期境界、LJ力のゼロ点、作用反作用を確認するSoA化し、cargo benchで力計算を比較する

検証と実装の観点

古典力学のシミュレーションでは、軌道の見た目だけでなく、保存量と単位系を確認します。 特に長時間積分では、短時間の局所誤差よりもエネルギーや角運動量のdriftが重要になる場合があります。

  • force、state、time step、保存量の計算を分けて実装する。
  • 解析解、保存量、対称性、作用反作用を小さいテストで確認する。
  • 初期条件、単位系、time step、積分手法をmetadataとして残す。
  • agentに実装を任せた場合も、力の符号、境界条件、保存量の定義をdiffで確認する。