Wie kann ich die Euler-Methode durch Runge-Kutta 4. Ordnung ersetzen, um die Bewegung des freien Falls in nicht konstanter Gravitationsgröße (z. B. freier Fall aus 10 000 km Höhe) zu bestimmen?
Bisher habe ich eine einfache Integration nach der Euler-Methode geschrieben:
while()
{
v += getMagnitude(x) * dt;
x += v * dt;
time += dt;
}
x Variable bedeutet aktuelle Position, v bedeutet Geschwindigkeit, getMagnitude (x) gibt die Beschleunigung auf x Position zurück.
Ich habe versucht, RK4 zu implementieren:
while()
{
v += rk4(x, dt) * dt; // rk4() instead of getMagintude()
x += v * dt;
time += dt;
}
Dabei ist der Funktionskörper von rk4 ():
inline double rk4(double tx, double tdt)
{
double k1 = getMagnitude(tx);
double k2 = getMagnitude(tx + 0.5 * tdt * k1);
double k3 = getMagnitude(tx + 0.5 * tdt * k2);
double k4 = getMagnitude(tx + tdt * k3);
return (k1 + 2*k2 + 2*k3 + k4)/6.0;
}
Aber etwas stimmt nicht, weil ich nur einmal mit RK4 (Beschleunigung) integriere. Die Integration der Geschwindigkeit mit RK4 ist nicht sinnvoll, da sie mit v * dt identisch ist.
Können Sie mir sagen, wie man Differentialgleichungen zweiter Ordnung mithilfe der Runge-Kutta-Integration löst? Sollte ich RK4 implementieren, indem ich die Koeffizienten k1, l1, k2, l2 ... l4 berechne? Wie kann ich das machen?