さらに、4次の項までとった計算結果 Fortranのプログラムつき [ひとこと言わねば]
初期値問題
に対し、テーラー展開を4次の項までとった
を使って、計算点の間隔hをh=0.5として、x=0からx=5まで計算した結果はこちら↓
h=0.5という粗い間隔でもかなりよく計算できていることがわかる。
この計算法は、4次のルンゲ・クッタ法と同程度の計算精度をもっているから、当たり前といえば当たり前なんだけれど、スゴイにゃ。
参考までに、スプレッドシートを使って、オイラー法と2次の項までとったテーラー展開に基づく、同一条件での計算結果のグラフは次のとおり。
その差は歴然!!
ということで、例によって、久しぶりに、ネムネコの自尊ソングを♪
なお、この計算に使用したForranのプログラムはこちら。
parameter(n=10)
real x(0:n),y(0:n)
x=0; y=0
a = 0; b = 5
h = (b-a)/n
do i=1,n
x(i)=a+h*i
end do
do i=0, n-1
dy1 = x(i)+y(i)
dy2 = 1+dy1
dy3 = 1+dy1
dy4 = 1+dy1
y(i+1)=y(i)+dy1*h+dy2/2*h*h+dy3/6*h*h*h+dy4/24*h**4
end do
write(*,*) ' x 数値解 厳密解 相対誤差'
do i=0,n
write(*,100) x(i),y(i),exp(x(i))-x(i)-1,abs(y(i)-(exp(x(i))-x(i)-1))
end do
100 format(3(f10.6,1x),e13.6)
end
function f(x,y)
f=x+y
end
この問題の場合、2次以上の高次微分が
と簡単になるので、
とすることによって、4次のルンゲ・クッタ法以上の高精度で計算することができると同時に、より高精度な計算への拡張が可能になる。
なのですが、
その反面、
から求められる3次以上の高次微分が複雑になる場合、この高次微分を自分で手計算で求めなければならないのでこの手間がかかると同時に、汎用的なプログラム化を妨げるという致命的な欠点を有しているのは事実。
とはいえ、
2次微分は、
から簡単に計算できるので、テーラー展開の2次の項までとって計算することはたいして苦にならないでしょう。
たとえば、f(x,y)=x+sin yとした
の場合、(4)式を使わず、この式の両辺をxで微分すれば、
と簡単に求められる。
そして、テーラー展開とこの結果に基づき
という漸化式を作り、前進的に解いてゆけば、修正オイラー法や2次のルンゲ・クッタ法を知らなくても、修正オイラー法や2次のルンゲ・クッタ法と同程度の精度で計算することができる。
テーラー展開という微分の比較的初歩的な知識を使うだけで、
というタイプの常微分方程式の初期値問題の比較的高精度の数値解を求められるのだから、この利点は大きいのではないか。
だ・か・ら、
お前らにだけは、
「常微分方程式の初期値問題の数値解を求められません」
なんてふざけたことは言わせない!!
コメント 0