SSブログ

「い」さんからいただいた質問の回答 [ひとこと言わねば]

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

 

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

 

 

第2種境界条件の入れ方

 

断熱条件

  

のプログラムへの実装の仕方。

という仮想の値を設け、条件(1)を中心差分を用いて表現すると、

  

したがって、

  

とすればよい。

 

より一般的の第2種境界条件

  

の場合は、

  

なので、

  

 

そして、i=0を含めて、ルンゲ・クッタ法で解けばよい。

 

 


nice!(2)  コメント(3) 

nice! 2

コメント 3

PAN

質問なのですが ルンゲクッタのdo k=2,3のループ内ではdk(1,0)やdk(1,nx)などを使っているように見えるのですが
dk(1,i)のループを見る限るそれがない気がしています.
do j=1,nt
do i=1,nx-1
dk(1,i) = dt*f(t(i-1,j-1),t(i,j-1),t(i+1,j-1),c)
end do
ここにdk(1,0)やdk(1,nx)は定義されていない様子です。 例えば、dk(2,1)=dt*f(t(0,0)+dk(1,0)/2,t(1,0)+dk(1,1)/2,t(2,0)+dk(1,2)/2
dk(1,0)の与えはわかりません。
私の勘違いかもしれないですが教えていただけないでしょうか?

by PAN (2019-12-05 17:21) 

nemurineko

コメント、ありがとうございます。

☆ここにdk(1,0)やdk(1,nx)は定義されていない様子です。 例えば、dk(2,1)=dt*f(t(0,0)+dk(1,0)/2,t(1,0)+dk(1,1)/2,t(2,0)+dk(1,2)/2
dk(1,0)の与えはわかりません。
私の勘違いかもしれないですが教えていただけないでしょうか?
◇これは、
 初期条件:T(x,0)=x(4−x)
 境界条件:T(0,t)=0, T(4,t)=0
から、
 T(0,0)=0, T(nx,0)=0
 T(0,j)=0, T(nx,j)=0
になるためです。

この部分は、
プログラム中のT(i,j)の初期化、初期条件、ならびに、境界条件の箇所で
! 初期化
do i=0, nx
do j=0,nt
t(i,j)=0.
end do
end do

! 初期条件
do i=0,nx
x=i*dx
t(i,0)=x*(l-x)
end do

! 境界条件
do j=0,nt
t(0,j)=0.
t(nx,j)=0.
end do
として与えています。

ルンゲ・クッタ法で実際に計算する部分は、i=1〜nx−1、j=1〜ntで、
t(0,j)=0、t(nx,j)=0
と、この部分は不変なので、計算をする必要がないんですよ。

境界条件が
 ∂T/∂x(0,t)=0, ∂T/∂x(4,t)=0
といった(断熱)条件や
 ∂T/∂x(0,t)=q₀, ∂T/∂x(4,t)=q₄
といった条件が入っている場合は、時間と共にT(0,t)、T(4,t)の値が変化するので、t(0,j)、t(nx,j)の部分も含めて(ルンゲ・クッタ法で)計算しないといけませんけどね。


by nemurineko (2019-12-05 20:24) 

PAN

なるほど!分かりました、ありがとうございます。
by PAN (2019-12-05 23:12) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。