常微分方程式
一階の常微分方程式の解を求めるプログラムを書いてみたのですが、分からない事柄があったので質問させていただきました。
なお、このプログラムは dy/dx = e^(3x)+2y という微分方程式の解をオイラー法とホイン法で計算する(厳密値も計算している)というものです。
このプログラムを実行してみたところ、オイラー法で計算した値は正しいことが分かりました。しかし、ホイン法で計算した値が微妙に違っているようでした。(出力結果の模範解答と照らし合わせた結果)
個人的にはプログラムの内容は正しいと思ったのですが、どこかに間違いがあるのでしょうか?
どなたか分かる方がいらっしゃいましたら、教えていただけると幸いです。
Option Explicit
Sub main()
Dim h As Double, xmax As Double
Dim x As Double, y As Double
Dim yS As Double, yE As Double, yH As Double
Dim k1 As Double, k2 As Double
Dim f As Double, g As Double
Dim n As Double
x = 0
yS = 1
yE = 1
yH = 1
h = 0.01
n = 2
xmax = 1
Sheet1.Cells(2, 1) = x
Sheet1.Cells(2, 2) = yE
Sheet1.Cells(2, 3) = yH
Sheet1.Cells(2, 4) = yS
With Worksheets("Sheet1")
Do
yS = Exp(3 * (x + h))
rhs x, yE, f
yE = yE + h * f
rhs x, yH, f
rhs2 x, yH, h, k1, g
k1 = h * f
k2 = h * g
yH = yH + (k1 + k2) / 2
x = x + h
n = n + 1
.Cells(n, 1) = x
.Cells(n, 2) = yE
.Cells(n, 3) = yH
.Cells(n, 4) = yS
Loop Until x >= xmax
End With
End Sub
Sub rhs(x As Double, y As Double, f As Double)
f = Exp(3 * x) + 2 * y
End Sub
Sub rhs2(x As Double, y As Double, h As Double, k1 As Double, g As Double)
g = Exp(3 * (x + h)) + 2 * (y + k1)
End Sub
Sub clear()
Sheet1.Columns(1).ClearContents
Sheet1.Columns(2).ClearContents
Sheet1.Columns(3).ClearContents
Sheet1.Columns(4).ClearContents
Sheet1.Cells(1, 1) = "xの値"
Sheet1.Cells(1, 2) = "オイラー法"
Sheet1.Cells(1, 3) = "ホイン法"
Sheet1.Cells(1, 4) = "厳密解"
End Sub