本稿から具体的な数値計算の手法についての話に入る。 まずは、古典力学の基本方程式であるNewtonの運動方程式を数値的に解く手法から。
古典力学と常微分方程式
ここで、は外部から質点に作用する力である。
:時間、:質点の位置、:質点の速度である。
- 一般に、は時刻と位置およびに依存する。
- たとえば、重量の場合はとなる。
- 強制振動の場合は、。
- バネの場合は、。
- 空気抵抗の場合は、。
といったように、作用する力の種類によって、の関数形が決まる。
2階常微分方程式の変形
再び、Newtonの運動方程式に戻る。
2階の常微分方程式を数値計算するには、新たに速度を導入することで、以下のような2つの1階の常微分方程式に分けると、数値解法を適用しやすくなる。
常微分方程式は、一般にN個の成分それぞれに対する1階の常微分方程式として、以下のような形で表せる。
ベクトルの形で書くと以下となる。
ここで、ベクトル表記を用いている。
Newtonの運動方程式を一般的なベクトル表記の形式に当てはめると、以下のようになる。
- 1次元の場合 と定義できる。
- 2次元の場合 と定義できる。
- 3次元の場合 と定義できる。
常微分方程式の数値解法
基本的な考え方として、位置、時間を離散化する。
時刻での位置ベクトルとおく。
を既知として、次の時刻[tex: t{n+1}]での位置ベクトル[tex: \boldsymbol{y}{n+1}]を以下のように逐次的に求める。
ここで、を見積もる方法として、次のようなものがある。
- 陽解法
- 陰解法
- 予測子-修正子法
陽解法
陽解法は、もっとも直接的な方法で、代表的なのがオイラー法である。
<基本的な考え方> - における関数の接線でを近似。 - 接線は、をの周りでテイラー展開し、[tex: h2]以上の項を無視することで得られる。
式で書くと以下となる。
Euler法(中点法)
オイラー法の考え方をより精度を高いものにした手法として、中点法がある。
以下に中点法の考え方と模式図を示す。
- 傾きで中間点まで進み、そこで新たに傾きを見積もる。
- 傾き[yex: k_2]を使って、元の出発点から終点まで進める。
式で書くと、次のようになる。
ポイント
- 新たな傾きはで計算するが、の計算は、元の出発点に戻って、を使って計算する。
- 1回の時間発展において、関数を2回計算することで、精度の次数が1つ向上する。
ルンゲ・クッタ法
精度と実装の簡潔さのバランスが取れていて最もよく使われる手法が4次のルンゲ・クッタ法(Runge-Kutta method)である。
4次のルンゲ・クッタ法の詳細な考え方は省略するが、以下の式で与えられる。