ダウンロード |
私はアルゴリズムの専門家ではないので、この「なぜ?」の部分はあまり深く立ち入らず、ユーザーとして使うようにしていますが、いずれ解いてみたいと思っています。
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 件のコメント:
コメントを投稿