2.7 微分方程式の数値解法による定積分 . . 微分方程式(2.8)は関数 1000(2t−1)が y' に関して一定であると仮定できる狭い範囲に対しては解の存在条件(2.11)を持つ。これは、hの値は t=0 及び t=1 の近傍では非常に小さくなければならないが、0.1<t<0.9 の範囲では非常に大きくてもよいことを示す。従って、第2.3節の Program 2.2 は 2h=0.02 の基本ステップ幅のような非常に大きな区間幅でこれを解くことができる。しかし、そのhの値は t=0 の近傍では微係数の値が非常に大きいために計算でオーバーフローを起こす。 . . これらの書き換え部分は Program 2.4 に太字を用いて示してある。Program 2.4 は又、数値解と比較するための真の解をプリントする文を持たず、60行は単に改行文だけを持つ。真の解が必要なら以下に示すように60行は X# を用いてそれを計算し、プリントする文を持たねばならない。但し、 X# は X2 の末尾に零を付加した値でなければならない。
. .
上記プログラム及び(2.9)(2.10)の結果は Table 2.11, Table 2.12 及び Table 2.13 に示すように安定に得られる。しかし、t=1 におけるこれらの値は2乃至3桁の有効桁である。これらの解が大きな誤差を持つ原因は2つあり、それを取り除くのは容易に可能である。
. .
この誤差を避けるため、積分範囲を[0, 0.5] と [0.5, 1]の二つの積分に分けなければならない。そして2番目の積分範囲は左に1移動されなければならない、即ち、 y' (t)は u=t−1 を代入して変数 u の関数にしなければならない。更に、その積分範囲の積分は(2.12)に示すように 0 から −0.5 へと実行されねばならない。その積分値は下記の副プログラムを与えられた Program 2.4 により得られ、0 と 0.5 の間の積分値と符合が変わる以外同じになる。 =−1.3815480×10−2−1.3815480×10−2=−2.7630960×10−2
Table 2.12 は(2.9)の微分方程式は t=0.5 の極近傍で解の存在条件が一層厳しくなることを示す。従って、(2.9)の被積分関数は 0.5 左へシフトし以下のように積分しなければならない。 =1.5687959−(−1.5687959)=3.1375918 . . Table 2.13 は(2.10)の微分方程式は t=0, t=0.5 及び t=1 の極近傍で解の存在条件が一層厳しくなることを示す。従って、積分範囲は[0, 0.25][0.25, 0.5][0.5, 0.75] 及び [0.75, 1]の四つに分けなければならない。第2及び第3範囲は 0.5 左へシフトしなければならず、第4範囲は1左へシフトしなければならない。これらの範囲の積分は以下のように行わねばならない。 =−51.261383−2565.9854+(−2549.3049)−28.693586=−5195.2452 . . これら三つの例の定積分の結果は全て単精度で有効であり、クロック 10 MHz の 8086 CPU を用いたコンピュータで2乃至4分を要する。 目 次 へ |