非線形方程式と最適化
Important
この章を読む前に
この章を読むには、以下の章を先に読んでおく必要があります。
本章では、非線形な方程式を数値的に解く方法と、関数の最小値(または最大値)を求める最適化問題について扱います。
非線形方程式とは
線形代数の章で扱った方程式は、 という形式で書ける「線形」なものでした。これらは行列の分解などを用いて、有限回の手順で厳密解(計算誤差を除いて)を求めることができます。
しかし、物理の世界にはそのような単純な形では書けない方程式が溢れています。
あるいは、複数の変数が絡み合う連立非線形方程式:
これらの方程式には、一般に解析的な解の公式が存在しません(あるいは非常に複雑です)。そのため、適当な初期値から出発して、反復計算 (Iterative Method) によって徐々に真の解に近づいていく数値解法が必要になります。
本章の構成
-
非線形方程式の解法 1変数の非線形方程式 の解(根)を見つける基本的なアルゴリズム(二分法、ニュートン法)を学びます。
-
多変数ニュートン法 変数が複数ある場合の連立非線形方程式 の解き方を学びます。ここでは線形代数の知識(ヤコビ行列)が必要になります。
-
関数の最適化 エネルギー最小化問題など、物理学で極めて重要な「関数の値を最小にする変数を求める」問題について、勾配降下法を中心に解説します。
作業テーマ
作業ディレクトリは ~/rust-computational-physics-work/ からの相対パスです。
ユニットテストで確認する具体的なケースは、解析解、境界条件、許容誤差の観点からAI coding agentと相談して決めます。
| テーマ | 作業ディレクトリ | 構造化するコード | ユニットテスト演習 | 拡張演習 |
|---|---|---|---|---|
| 二分法とニュートン法 | nonlinear/root-finding | bisection, newton, RootResult | x^2 - 2 = 0 で解と残差を確認する | 収束失敗をResultで返す |
| 多変数ニュートン法 | nonlinear/multivariable-newton | residual, jacobian, newton_step | 小さい連立方程式で残差減少を確認する | 反復履歴をCSVに出力する |
| 最適化 | nonlinear/optimization | gradient_descent, line_search, grad_norm | 二次関数の最小点を確認する | step sizeを変えた収束比較を追加する |
検証と実装の観点
非線形問題では、収束したように見える値が物理的・数値的に妥当とは限りません。 反復回数、残差、停止条件、初期値依存性を結果と一緒に確認します。
- 二分法では、初期区間で符号変化があるかを必ず確認する。
- ニュートン法では、導関数が小さい点、発散、反復回数上限を扱う。
- 最適化では、勾配ノルム、step size、目的関数の減少を記録する。
- 収束失敗は
panic!ではなく、可能な範囲でResultとして呼び出し側へ返す。