1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| Option Explicit
Public Sub Test()
Call RungeKutta(0, 2, 10, 0.5)
End Sub
'Méthode de Runge-Kutta
Private Sub RungeKutta(dblStart As Double, dblEnd As Double, dblSize As Double, dblStartValue As Double)
Dim dblPas As Double, dblTime As Double, dblValue As Double
Dim k1 As Double, k2 As Double, k3 As Double, k4 As Double
dblPas = (dblEnd - dblStart) / dblSize
dblValue = dblStartValue
For dblTime = dblStart To dblEnd Step dblPas
k1 = dblPas * f(dblTime, dblValue)
k2 = dblPas * f(dblTime + dblPas / 2, dblValue + k1 / 2)
k3 = dblPas * f(dblTime + dblPas / 2, dblValue + k2 / 2)
k4 = dblPas * f(dblTime + dblPas, dblValue + k3)
Debug.Print ("TIME: " & dblTime & " " & "VALUE: " & Format(dblValue, "0.00"))
dblValue = dblValue + (k1 + 2 * k2 + 2 * k3 + k4) / 6
Next dblTime
End Sub
'Fonction différentielle à étudier
Private Function f(t, y)
f = y - t * t + 1
End Function |
Partager