Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

常微分方程式

Important

この章を読む前に

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

物理法則の多くは、時間や空間に対する変化率(微分)を含む微分方程式 (Differential Equations) として記述されます。

本章では、時間変数 の関数である に対する常微分方程式 (Ordinary Differential Equation, ODE) の初期値問題を数値的に解く手法を学びます。

本章の構成

  1. オイラー法 最も単純な解法であるオイラー法を通じて、微分方程式を数値的に解く(時間発展させる)基本的な考え方を学びます。

  2. ルンゲ=クッタ法 実用的な標準手法である4次のルンゲ=クッタ法 (RK4) を学びます。精度と計算コストのバランスが良く、最も広く使われている手法の一つです。

  3. 適応型刻み幅制御 誤差の大きさに応じて時間刻み を自動的に調整し、効率よく高精度な解を得る手法(ルンゲ=クッタ=フェールベルグ法など)を紹介します。

  4. 境界値問題 初期値問題とは異なり、区間の両端で条件が与えられる問題(例:両端が固定された弦の振動など)を解く「シューティング法」について触れます。

作業テーマ

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

テーマ作業ディレクトリ構造化するコードユニットテスト演習拡張演習
オイラー法ode/eulereuler_step, integrate, max_error指数関数の解析解と比較する刻み幅ごとの誤差をCSVに出力する
ルンゲ=クッタ法ode/rk4rk4_step, integrate, state_normRK4の刻み幅依存を確認するEuler法との誤差比較を追加する
適応型刻み幅ode/adaptive-steprk_embedded_step, accept_step, next_dt許容誤差を変えたときの結果を確認するrejected step数をmetadataに保存する
境界値問題ode/boundary-valueshoot, boundary_residual, bisect_slope線形な境界値問題で既知解と比較する初期推定を変えた収束比較を追加する

検証と実装の観点

常微分方程式の計算では、時間刻みを変えたときの収束性と、物理量の保存性を 分けて確認します。短時間で精度が高くても、長時間で保存量が大きく漂う場合があります。

  • 解析解が分かる指数関数や調和振動子で、刻み幅依存の誤差を確認する。
  • state、微分方程式、1 step更新、出力処理を関数やmoduleで分ける。
  • energy、norm、massなど、問題に応じた保存量や単位を確認する。
  • initial condition、time span、step size、toleranceを結果と一緒に保存する。