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