Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

数値微分と数値積分

Important

本章の前提知識

本章の内容を理解するためには、以下の章を事前に学習しておく必要があります。

第1部では、計算機の基本モデル、Rustで数値計算を行うための最小限の書き方、 多次元データ、結果保存の方針を確認しました。本章では、その知識を活用して、 微積分学の基本的な演算である「微分」と「積分」をコンピュータ上で実現する手法を学びます。

微分と積分は、物理学における運動方程式の解析、エネルギー計算、確率分布の取り扱いなど、計算物理学のあらゆる場面で必要不可欠な操作です。しかし、解析的に計算できる場合は限られており、多くの実問題では数値的な手法に頼らざるを得ません。本章では、そうした数値計算手法の原理と実装を、Rustを用いて体系的に学んでいきます。

本章の構成

  • 数値微分 関数の微分をコンピュータ上で近似的に求める「数値微分」の手法を解説します。前進差分、後退差分、中心差分などの基本的な差分法と、それらの精度や誤差の特性について学びます。

  • 数値積分(台形則・シンプソン則) 定積分を数値的に計算するための基本的な手法である「台形則」と「シンプソン則」を紹介します。これらは関数を区間ごとに多項式で近似し、その面積を計算することで積分値を求める古典的かつ実用的な手法です。

  • ガウス求積法 台形則やシンプソン則よりも高精度な積分を実現する「ガウス求積法」について解説します。この手法は、積分点の配置を最適化することで、少ない評価点数で高い精度を達成できる強力な手法です。

  • 適応型積分 被積分関数の振る舞いに応じて自動的に積分点の配置を調整する「適応型積分」を学びます。この手法により、関数が急激に変化する領域でも効率的かつ高精度に積分を計算できるようになります。

本章を終えることで、読者は微分・積分を数値的に計算する様々な手法を習得し、 それらをRustで実装する能力を身につけます。これらの技術は、後続章で扱う 微分方程式の数値解法や、より高度な物理シミュレーションの基盤となります。

作業テーマ

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

テーマ作業ディレクトリ構造化するコードユニットテスト演習拡張演習
数値微分calculus/differentiationforward_diff, central_diff, estimate_errorsin(x) や低次多項式で解析解と比較する刻み幅ごとの誤差をCSVに出力する
数値積分calculus/integrationtrapezoidal_rule, simpson_rule, estimate_error低次多項式を解析解と比較する分割数ごとの誤差をCSVに出力する
ガウス求積法calculus/gaussian-quadraturegauss_legendre_2, map_interval3次以下の多項式で厳密性を確認する分点数を切り替えられる形にする
適応型積分calculus/adaptive-integrationadaptive_simpson, estimate_local_error滑らかな関数で許容誤差を確認する再帰回数と区間分割をmetadataとして保存する

検証と実装の観点

本章の実装では、公式をコードに写すだけでなく、既知の関数で精度を確認します。 例えば、 の微分、低次多項式の積分、解析解が分かる滑らかな関数を使うと、 差分幅や分割数を変えたときの誤差の変化を追跡できます。

  • 微分では、前進差分・中心差分の誤差が刻み幅にどう依存するかを確認する。
  • 積分では、n = 0、分割数の偶奇、非滑らかな関数などの境界条件を明示する。
  • differentiateintegrateestimate_error のように小さい関数へ分ける。
  • agentに実装を任せた場合も、比較対象、許容誤差、分割数をdiffで確認する。