微分方程式 - ルンゲ・クッタ法

ダウンロード
微分方程式に通常用いるのは、このルンゲ・クッタ法になります。なんといっても精度が高いです。ですが、「なぜこんな式になっているの?」に答えるには結構一生懸命面倒な式を解かないといけません。
私はアルゴリズムの専門家ではないので、この「なぜ?」の部分はあまり深く立ち入らず、ユーザーとして使うようにしていますが、いずれ解いてみたいと思っています。



Option Explicit

Public Const m = 100

Sub Runge_Kutta()

  '変数の定義 -------------------------------------
  Dim i%, j%, n%
  Dim h#
  Dim t(m) As Double, f(m) As Double
  Dim k1#, k2#, k3#, k4#
   
  '初期値の設定  ----------------------------------
  n = Cells(2, 3)       'データの数
  h = Cells(3, 3)       '刻み
  t(0) = Cells(5, 3)    'xの初期値
  f(0) = Cells(6, 3)    'fの初期値
 
  'xとfの計算  ------------------------------------
  For i = 0 To n - 1    'VBAの配列は0から始まる!
    t(i + 1) = t(i) + h
    k1 = h * dfdt(t(i), f(i))
    k2 = h * dfdt(t(i) + h / 2, f(i) + k1 / 2)
    k3 = h * dfdt(t(i) + h / 2, f(i) + k2 / 2)
    k4 = h * dfdt(t(i) + h, f(i) + k3)
   
    f(i + 1) = f(i) + 1 / 6 * (k1 + 2 * k2 + 2 * k3 + k4)
  Next i
 
  'シート出力  ------------------------------------
  For i = 0 To n - 1
    Cells(i + 12, 2) = t(i)
    Cells(i + 12, 3) = f(i)
  Next i               
               
End Sub

Function dfdt(t#, f#) As Double
  dfdt = f - 2 * Exp(-t)
End Function

Sub Initialize()
  Range("B12:C100") = ""
End Sub

0 件のコメント:

コメントを投稿