ルンゲクッタ法(以下RK)は&ref(rk.eq1.gif,nolink,70%);から複数の段階を経てより高精度な近似を行う.
段数を上げることでより高次の精度を得られる.
ただし,段数=次数となるのは4段4次までで,それ以降は5段4次や8段6次など段数よりも低い次数になる.
そのため4次のルンゲクッタ(RK4)がもっともよく使われる.
ちなみに,前進オイラー法は1段1次のルンゲクッタと同じである.

移流方程式の時間微分以外の項を&ref(rk.eq2.gif,nolink,70%);として,一般的なRKは,
#ref(rk.eq3.gif,nolink,70%)

ここで,&ref(rk.eq4.gif,nolink,70%);である.
上付きの&ref(rk.eq5.gif,nolink,70%);はRKのステップごとの中間値を示している.

**RK2(改良オイラー法) [#l839822c]
***RK2(改良オイラー法) [#l839822c]
2段2次のルンゲクッタは改良オイラー法(modified Eular method)とも呼ばれている.
#ref(rk.eq6.gif,nolink,70%)

**RK3 [#ee2cd081]
***RK3 [#ee2cd081]
3段3次のルンゲクッタの式は以下.
#ref(rk.eq7.gif,nolink,70%)

**RK4 [#k4ce1d9c]
***RK4 [#k4ce1d9c]
4段4次のルンゲクッタの式は以下.
#ref(rk.eq8.gif,nolink,70%)


-例:矩形波の移流
***例:矩形波の移流 [#t51dbf62]
矩形波(0.25 < x < 0.75で1,それ以外で0)を一定速度(u=0.75)で移流させた結果を示す.グリッド解像度N=128, シミュレーション空間の大きさL=5.0,グリッド幅Δx=L/N,タイムステップ幅Δt=(1.0/CFL)*Δx/uとして,CFL=7, 1.1, 0.535の場合を示す.

|&ref(rectan_rk_cfl7.jpg,,100%);|
|CENTER:前進オイラー,RK2, RK3での移流結果.CFL=7でΔt=0.00744.|

|&ref(rectan_rk_cfl11.jpg,,100%);|
|CENTER:RK2,RK3,RK4での移流結果.CFL=1.1でΔt=0.0473.|

|&ref(rectan_rk_cfl0535.jpg,,100%);|
|CENTER:RK3,RK4での移流結果.CFL=0.535でΔt=0.0972.|

ルンゲクッタの次数が上がるにつれてより大きなタイムステップでも安定して計算できるようになる.下2つのグラフではCFL=1.1, 0.535と中途半端な数字になっているが,これはRK2,RK3が振動を始める限界を探って設定したためである.ちなみにRK4の限界はCFL=0.49ぐらいなので,RK3とRK4の安定性は大きくは変わらない.

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS