プログラム 時間積分について
解決したいこと
私はプログラム(ここではforranだが他の言語の方もアドバイスお願いします。)上での時間積分式にオイラー法を使用しているのですが精度が悪いのか途中で値がNaNになりうまくいきません。
そこでルンゲ・クッタ法など、より精度の良い時間積分を用いたいのですが調べてみてもプログラム上でどう実装するのかが分かりません。
今2次元の流体方程式を解こうとしていて、計算スキームは2次の中心差分法を用いています。↓のコードをオイラー法からより精度の良いものに変えたいです。長くなりましたが分かる方よろしくお願いします。
自分のコード(1部省略)# dnu/dt = R_nuの微分方程式を考える。C1= 1/(2×格子幅)
do ix = ~
do iy = ~
R_nu(ix,iy) = -ux(ix,iy)C1(nu(ix+1,iy)-nu(ix-1,iy))-uy(ix,iy)C1(nu(ix,iy+1)-nu(ix,iy-1)) &
-nu(ix,iy)C1(ux(ix+1,iy)-ux(ix-1,iy) +uy(ix,iy+1)-uy(ix,iy-1))
enddo
enddo
~省略~
nu(:,:) = nu(:,:) + R_nu*dt #時間発展式(オイラー法)
発生している問題・エラー
時間発展させると途中で値がNanになってしまいます
例)
#こんな感じでx座標 y座標 nu ux uy siitaというそれぞれ2次元変数に関する方程式を回して値を出しています。
-0.500000E+02 -0.500000E+02 0.121000E+00 NaN NaN 0.100000E+01
または、問題・エラーが起きている画像をここにドラッグアンドドロップ
該当するソースコード
例)
```ruby
def greet
puts Hello World
end
自分で試したこと
ここに問題・エラーに対して試したことを記載してください。