アップデート 2002.8.16

4元連立微分方程式
ルンゲ_クッタ法(マクロ04)


Sub RK_method04()
Range("c4:g150").Clear '領域消去
Cells(4, 3) = Cells(2, 2) '初期データを記憶
Cells(4, 4) = Cells(3, 2) '初期データを記憶
Cells(4, 5) = Cells(4, 2) '初期データを記憶
Cells(4, 6) = Cells(5, 2) '初期データを記憶
Cells(4, 7) = Cells(6, 2) '初期データを記憶
h = Cells(7, 2) '刻み幅の取得
h2 = h / 2 '刻み幅の半分の計算
For n = 4 To 150 '繰り返し
tn = Cells(n, 3) '変数値の取得
x1n = Cells(n, 4) '関数値の取得
x2n = Cells(n, 5) '関数値の取得
x3n = Cells(n, 6) '関数値の取得
x4n = Cells(n, 7) '関数値の取得
Cells(2, 3) = tn '作業領域に複写
Cells(2, 4) = x1n '作業領域に複写
Cells(2, 5) = x2n '作業領域に複写
Cells(2, 6) = x3n '作業領域に複写
Cells(2, 7) = x4n '作業領域に複写
k11 = h * Cells(2, 9) 'k1の値の計算
k21 = h * Cells(3, 9) 'k2の値の計算
k31 = h * Cells(4, 9) 'k3の値の計算
k41 = h * Cells(5, 9) 'k4の値の計算
Cells(2, 3) = tn + h2 '変数値の変更
Cells(2, 4) = x1n + k11 / 2 '関数値の変更
Cells(2, 5) = x2n + k21 / 2'関数値の変更
Cells(2, 6) = x3n + k31 / 2'関数値の変更
Cells(2, 7) = x4n + k41 / 2'関数値の変更
k12 = h * Cells(2, 9) 'k1の値の計算
k22 = h * Cells(3, 9) 'k2の値の計算
k32 = h * Cells(4, 9) 'k3の値の計算
k42 = h * Cells(5, 9) 'k4の値の計算
Cells(2, 4) = x1n + k12 / 2 '作業領域に複写
Cells(2, 5) = x2n + k22 / 2 '作業領域に複写
Cells(2, 6) = x3n + k32 / 2 '作業領域に複写
Cells(2, 7) = x4n + k42 / 2 '作業領域に複写
k13 = h * Cells(2, 9) 'k1の値の計算
k23 = h * Cells(3, 9) 'k2の値の計算
k33 = h * Cells(4, 9) 'k3の値の計算
k43 = h * Cells(5, 9) 'k4の値の計算
tnp = tn + h '変数値の変更
Cells(2, 3) = tnp '変数値の変更
Cells(2, 4) = x1n + k13 ''関数値の変更
Cells(2, 5) = x2n + k23 ''関数値の変更
Cells(2, 6) = x3n + k33 '関数値の変更
Cells(2, 7) = x4n + k43 '関数値の変更
k14 = h * Cells(2, 9) 'k1の値の計算
k24 = h * Cells(3, 9) 'k2の値の計算
k34 = h * Cells(4, 9) 'k3の値の計算
k44 = h * Cells(5, 9) 'k4の値の計算
np = n + 1
Cells(np, 3) = tnp '新しい変数値の記憶
Cells(np, 4) = x1n + (k11 + 2 * k12 + 2 * k13 + k14) / 6 '新しい関数値の記憶
Cells(np, 5) = x2n + (k21 + 2 * k22 + 2 * k23 + k24) / 6 '新しい関数値の記憶
Cells(np, 6) = x3n + (k31 + 2 * k32 + 2 * k33 + k34) / 6 '新しい関数値の記憶
Cells(np, 7) = x4n + (k41 + 2 * k42 + 2 * k43 + k44) / 6 '新しい関数値の記憶
Next n
End Sub