常微分方程式を数値計算で解く方法として、もっとも単純ですが、最も精度の悪い方法で
す。よっぽどのことが無い限り、この方法で微分方程式を計算してはいけません。ただし、
常微分方程式を数値計算することのイメージはつかみやすいでで述べておきます。
もう一度、初期条件を含めて数値計算により解くべき方程式を示します。
この微分方程式の解を

とすると、

のまわりのテイラー展開は、
です。この式の右辺第2項は、式(
6) から計算で
きます。したがって、テイラー展開は、次のように書き表すことが出来ます。
 |
(8) |
オイラー法での数値計算では、計算の刻み幅
は十分に小さいとして、
 |
(9) |
を計算します。式(
5)と全く同じです。このとき計算の精度は1次と
言います
2。
オイラー法をまとめると、以下に示すように微分方程式は差分方程式に変換さ
れます。
これれから、オイラー法での数値計算は、次の漸化式
が得られます。初期値

が決まれば、

が同
じ手続きで、芋づる式に計算できます。この芋づる式がコンピューターの得意なところで
す。通常、初期値は

と問題で与えられれます。
実際にプログラムを行うときは、forやwhileを用いて繰り返し計算を
行い、結果の
と
は、配列x[i] やy[i]に格納します。
x[0]=a;
y[0]=b;
while(計算終了条件){
delta_x や delta_y の計算
x[i+1]=x[i]+delta_x;
y[i+1]=y[i]+f(x[i],y[i])*delta_x;
}
この方法の計算のイメージは、図4の通りです。明らかに、出発点
の導関数のみ利用しているために精度が悪いことが分かります。式も対称でないため、逆
から計算すると元に戻りません。
図 4:
オイラー法。ある区間での
の変化
は、計算の始めの
点の傾きに区間の幅
を乗じて、求めている。
|
2次のルンゲ・クッタと呼ばれる方法は、いろいろあります。ここでは、代表的なホイン
法と中点法を示します。オイラーは1次の精度でしたが、これらは2次の精度があります。
先に示したように、オイラー法の精度は1次です。それに対して、2次のルンゲ・
クッタ法の精度は2次です。今まで刻み幅を

と記述していましたが、少し式が
長くなるので、それを

と表現します。
2次の精度ということは、テイラー展開より
 |
(12) |
となっていることを意味します。即ち、計算アルゴリズムが、
となっていることを言います。
式(13)から分かるように、
の増分
を計算する
ためには、1階微分と2階微分の2項を満たす式が必要です。そうすると少なく
とも、2点の値が必要となります。2点として、計算区間の両端の導関数の値を
使います。この導関数は問題として与えられているので、計算は簡単です。そ
うして、区間の増分を
をパラメーターとした和で表すことに
します。即ち、以下の通りです。
この

を上手に選ぶことにより、式(
13)と同
一にできます。この式を

の回りでテイラー展開すると
 |
(15) |
となります。これを、式(
13)と比較すると、

なので
とすれば良いことが分かります。これで、必要な式は求まりました。まとめる
と、式(
6)を数値計算で近似解を求める
には次式を使うことになります。
この式は、図
5のようになります。オイラー法の図
4との比較でも、精度が良いことが分かります。
図 5:
ホイン法。ある区間での
の変化
は、
計算の始めと終わりの点付近の平均傾きに区間の幅
を乗じて、求
めている。
|
よく見ると、この式(17)は、本当に2次の精度があるのでしょう
か?。
や
のパラメーターを計算したときの
の導関数は
を使いました。一方、式(17)では、
を使っています。ほんのちょっと違いますので、式
(17)が2次の精度を持っているか、検証してみましょう。この式を
変形することで、精度を確認しましょう。紙面の都合上、精度の確認は2段階
で行います。まず初めは、少なくとも2次の精度があることを確認します。そ
の後、3次の精度はないことを示します。
まずは、少なくとも2次の精度があることを確認します。
この結果は、まさに式(
7)と同じ形をしており、少なくとも
2次の精度があることが確認できます。
次に3次の精度がないことを示します。テイラー展開の3次の項は、係数は無視
すると、
となります
3。
一方、ホイン法の2次公式の
の項、即ち式(18)の右辺の
テイラー展開の2次の項は、以下の通りです。
明らかに、テイラー展開の3次の項である式(
19)とホイ
ン法の3次の項の式(
20)は異なっています。したがって、ホ
イン法は3次の精度がないことが分かります。少なくとも2次の精度があって、3次の精度
がないことが示され、ホイン法は2次の精度であることが証明されました。
これも、ホイン法と同じ2次の精度です。ホイン法は区間の両端の点の導関数
を使いましたが、中点方は始点と中点を使います。2点ありますので2次の精度
になります。ホイン法の式(
14)に対応するものは、
となります。これを

の回りでテイラー展開すると、
 |
(22) |
となります。これを、式(
13)と比較すると、
となります。したがって、中点法の公式は、
となります。この公式は、図
6のようになります。これが2次の精度である
ことの証明は、式(
18)と同じ手順で、以下の通りです。
これで少なくとも2次の精度があることが分かります。一方、3次の精度がない
ことは、以下の通り明らかである。式(
20)と比べ
て、微小変位

は、

異なるだけですので、計算結果は、
と直ちに分かります。
これもまた、式(
19)と異なりますので、3次
の精度がないことが分かります。
図 6:
中点法。ある区間での
の変化
は、中点付近の傾きに
区間の幅
を乗じて、求めている。
|
今まで示したオイラー法や2次のルンゲ・クッタ法のように、パラメーターを増やして誤
差項の次数を上げていく方法で、最良の方法と言われるのが4次のルンゲ・クッタ法です。
パラメーターを増やして、5, 6, 7,

と誤差項を小さくすることは可能ですが、
同じ計算量であれば4次のルンゲ・クッタの刻み幅を小さくするほうが精度が良いです。
私は、5次以上のルンゲ・クッタの公式は見たことがありません。
ということで、皆さんが常微分方程式を計算する必要が生じたときは、何はともあれ4次
のルンゲ・クッタで計算してください。「この問題を解く場合、4次のルンゲクッタだな」
と一言いって、プログラムを書き始めると、出来るなと思われること間違いなしです。間
違っても「2次のルンゲ・クッタ
」と言ってはいけません。「4次の方が
」
と言う輩が出てきます。普通の科学に携わる人にとって、4次のルンゲ・クッタは常微分
方程式の最初で最後の解法なのです。
ただし、4次のルンゲ・クッタ法よりも精度の良い方法がないわけでは有りません。より
高精度な方法として、Bulirsch-Store法や予測子・修正法などがあります。進んだ勉強を
したいときに、学習してください。
4次のルンゲ・クッタの公式は、式(27)に示す通りです。そして、これは
図7のように表せます。
2次の場合と同じ手順で、公式を導き、そして4次の精度であることが証明できると思いま
す。しかし、計算は明らかに大変なので、腕力のある人はトライしてみてください。
図 7:
4次のルンゲ・クッタ法。ある区間での
の変化
は、区間内の4点
の傾きのある種の加重平均に幅
を乗じて、求めている。
|
ホームページ:
Yamamoto's laboratory著者:
山本昌志
Yamamoto Masashi
平成16年9月13日