Estoy trabajando en una simulación basada en JavaScript web de un sistema de resorte-carrito-péndulo para aplicar algunas matemáticas que he aprendido recientemente en un proyecto pequeño y ordenado. Encontré una imagen de muestra en internet de lo que estoy tratando de modelar:
Entiendo cómo derivar las ecuaciones de movimiento encontrando el Lagrangiano y luego derivando las ecuaciones de movimiento de Euler-Lagrange a partir de ahí:
Dado que la masa del carrito es $M$ y la masa de la bola en el péndulo es $m$, la longitud del péndulo $l$, la distancia del carrito desde el equilibrio del resorte (con constante $k$) $x$ y el ángulo del péndulo $\theta$ tenemos las siguientes ecuaciones de movimiento:
$$x'' cos(\theta) + l\theta'' - gsin(\theta) = 0$$ $$(m+M)x''+ml[\theta''cos(\theta) - (\theta')^2sin(\theta)] = -kx$$ (Una derivación se puede encontrar aquí, aunque este no es el punto de la pregunta).
He aislado las ecuaciones para $x''$ y $\theta''$ de la siguiente manera:
$$x'' = \frac{-kx - ml[-sin(\theta)(\theta')^2-\frac{g}{l} cos(\theta)sin(\theta)]}{m+M - mcos^2(\theta)}$$
$$\theta'' = \frac{-gsin(\theta)-cos(\theta)x''}{l}$$
Luego utilicé el método de Euler usando condiciones previas/iniciales para resolver $x''$ y luego para $\theta''$ (ya que depende de $x''$. Luego resolví $x' = x''t + x'$, $x = x't + x$ (igual para $\theta$), donde $t$ es el tamaño del paso.
Este enfoque parece funcionar bien para condiciones iniciales donde $\theta$ o $\theta'$ son pequeños (aún tengo que probar jugando con $x$). Sin embargo, cuando establezco los valores de $\theta$ en valores más grandes, entonces mi resorte se vuelve loco y va por toda la pantalla.
Nunca he configurado físicamente un sistema de resorte-carrito-péndulo, por lo que tal vez mi simulación sea correcta (aunque tengo mis dudas), pero me preguntaba qué otros métodos puedo usar para una aproximación numérica y más precisa. Siempre podría establecer el tamaño del paso para la aproximación de Euler en algo más pequeño, pero eso afectaría la velocidad y funcionalidad de mi simulación.
He escuchado hablar de cosas como Runge-Kutta pero no estoy seguro de cómo aplicarlo a un sistema de EDO de segundo orden. ¿Alguien tiene algún consejo, lectura o ejemplos que pueda consultar para aprender una aproximación más precisa?
Gracias por su tiempo.
Saludos,