「い」さんから頂いた質問


 



質問なのですが ルンゲクッタのdo k=2,3のループ内ではdk1,0)やdk(1,nx)などを使っているように見えるのですが


dk(1,i)のループを見る限るそれがない気がしています.私の勘違いかもしれないですが教えていただけないでしょうか?
https://nekodamashi-math.blog.so-net.ne.jp/2017-11-24-3



 


【回答】


ルンゲ・クッタ法を用いる計算式(漸化式)は、


  


です。


なお、ここで、


  


です

 


プログラム中では、dk(i,j)で、に対応するdk(1,j)です。


したがって、


  


となるので、


プログラムでは


  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次元になれば、さらにプログラムは複雑化し、その上、メモリーの容量も大きくなりますので、余程の物好きでなければ、ルンゲ・クッタ法を用いて解いたりしません。
高精度で計算したいならば、無条件安定のクランク・ニコルソン法を使った方がいいんですよ。