「い」さんから頂いた質問
質問なのですが ルンゲクッタのdo k=2,3のループ内ではdk(1,0)やdk(1,nx)などを使っているように見えるのですが
dk(1,i)のループを見る限るそれがない気がしています.私の勘違いかもしれないですが教えていただけないでしょうか?
https://nekodamashi-math.blog.so-net.ne.jp/2017-11-24-3
【回答】
ルンゲ・クッタ法を用いる計算式(漸化式)は、
です。
なお、ここで、
です
プログラム中では、
したがって、
となるので、
プログラムでは
dk(1,i) = dt*f(t(i-1,j-1),t(i,j-1),t(i+1,j-1),c)
です。
dk(2,j)、dk(3,j)、dk(4,j)の計算ではそれぞれ、一つ前のステップの計算結果を必要としますが、
dk(1,j)の計算に関しては、
初期条件の温度と、
ルンゲ・クッタ法を用いてその都度更新される温度
を使い、
と計算します。
ですから、直接的ではなく、(3)式を通じて間接的に入っているというわけです。
(回答終)
ルンゲ・クッタ法を用いても解けますが、記事中に書いてあるように、ルンゲ・クッタを用いた解法はオイラー法などと同じく陽解法なので、数値解を振動させないためには、安定条件を満足させる必要があり、2次元、3次元の計算の場合、この条件を満足させるのが厳しくて、偏微分方程式の初期値問題の数値解法でルンゲ・クッタ法が使われることはありません。
しかも、
1次元の場合でさえ、このようにプログラムが長く、複雑になりますし、2次元、3次元になれば、さらにプログラムは複雑化し、その上、メモリーの容量も大きくなりますので、余程の物好きでなければ、ルンゲ・クッタ法を用いて解いたりしません。
高精度で計算したいならば、無条件安定のクランク・ニコルソン法を使った方がいいんですよ。