¿Cómo puedo reemplazar el método de Euler por el cuarto orden de Runge-Kutta para determinar el movimiento de caída libre en una magnitud gravitacional no constante (por ejemplo, caída libre desde 10 000 km sobre el suelo)?
Hasta ahora escribí integración simple por el método de Euler:
while()
{
v += getMagnitude(x) * dt;
x += v * dt;
time += dt;
}
x variable significa la posición actual, v significa velocidad, getMagnitude (x) devuelve la aceleración en la posición x.
Intenté implementar RK4:
while()
{
v += rk4(x, dt) * dt; // rk4() instead of getMagintude()
x += v * dt;
time += dt;
}
donde el cuerpo de la función rk4 () es:
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;
}
Pero algo está mal, porque me estoy integrando solo una vez usando RK4 (aceleración). La velocidad de integración con RK4 no tiene sentido porque es lo mismo que v * dt.
¿Podría decirme cómo resolver ecuaciones diferenciales de segundo orden utilizando la integración Runge-Kutta? ¿Debo implementar RK4 calculando los coeficientes k1, l1, k2, l2 ... l4? ¿Cómo puedo hacer eso?