Movimiento de proyectil de arrastre cuadrático

He calculado fórmulas con movimiento de trayectoria unidimensional (caída libre), incluido el arrastre cuadrático, y he creado las siguientes ecuaciones.Se creó la fórmula

Estas ecuaciones de movimiento no son de mucha utilidad por sí solas, por lo tanto, me gustaría un método analítico/método numérico para trazar el movimiento de un proyectil bidimensional en un gráfico, y contra x. Sin embargo, soy consciente de que las ecuaciones de movimiento para proyectiles bidimensionales son las siguientes:

metro a X = k v X 2 + v y 2 v X
metro a y = metro gramo k v X 2 + v y 2 v y
Me di cuenta de que debido a que las fórmulas tienen una referencia circular, no habrá una solución general, por lo que no existe un método analítico para trazar este gráfico, ya que el arrastre en la dirección x ralentizará el proyectil y cambiará el arrastre en la dirección y, así como viceversa.

Por lo tanto, aquí es donde no conozco el enfoque del problema, no estoy muy familiarizado con los métodos numéricos para resolver ecuaciones. ¿Hay alguna forma de hacer esto en una hoja de cálculo o en MATLAB, manteniendo un gran nivel de precisión (si es posible, usando RK4).

Nota: la velocidad x está orientada en el lado derecho y la velocidad y directamente hacia arriba.

Por favor corrígeme si he cometido algún error.

El arrastre cuadrático 2D también se consideró en esta publicación de Phys.SE y sus enlaces.
Sugiero buscar en velocity verlety verlet velocityen este sitio. hay muchas respuestas que hablan de eso, y es mucho más fácil de implementar que RK4. Wikipedia también tiene información al respecto.

Respuestas (1)

Básicamente tienes dos ODE para resolver:

(1) d v m d t = 1 metro F ( X m , v m ) (2) d X m d t = v m
que es más o menos el caso de la mayoría de las fuerzas en la mecánica newtoniana. Para resolver esto numéricamente, desea discretizar el espacio y el tiempo . Con un sistema como (1) y (2), realmente solo debemos preocuparnos por dividir el tiempo.

Una de las rutinas más estables no es en realidad RK4, sino una variación de la integración de salto llamada velocidad verlet . Esto convierte (1) y (2) en un proceso de varios pasos:

a 1 m = F ( X i m ) / metro X i + 1 m = X i m + ( v i + 1 2 a 1 m Δ t ) Δ t a 2 m = F ( X i + 1 m ) / metro v i + 1 m = v i m + 1 2 ( a 1 m + a 2 m ) Δ t
que en realidad es un poco fácil de implementar numéricamente, literalmente solo llama a la función para la fuerza y ​​luego actualiza un par de matrices ( x,y,vx,vy).

Donde tu problema difiere es que a m = a m ( X m , v m ) , lo que hace que calcular la segunda aceleración sea un poco complicado ya que a 2 depende de v i + 1 m y viceversa. Esta respuesta en GameDev (definitivamente vale la pena leer algunos aspectos numéricos del problema) sugiere que puede usar el siguiente algoritmo

a 1 m = F ( X i m , v i m ) / metro X i + 1 m = X i m + ( v i + 1 2 a 1 m Δ t ) Δ t v i + 1 m = v i m + 1 2 a 1 m Δ t a 2 m = F ( X i + 1 m , v i + 1 m ) / metro v i + 1 m = v i m + 1 2 ( a 2 m a 1 m ) Δ t
aunque el autor de esa publicación afirma,

No es tan preciso como Runge-Kutta de cuarto orden (como cabría esperar de un método de segundo orden), pero es mucho mejor que Euler o Verlet de velocidad ingenua sin la estimación de velocidad intermedia, y aún conserva la propiedad simpléctica de normal velocidad Verlet para fuerzas conservadoras no dependientes de la velocidad.

Dado que este es un movimiento de proyectil, X = y = 0 es probablemente una elección natural para las condiciones iniciales, con v y = v 0 pecado ( θ ) y v X = v 0 porque ( θ ) como es normal

También echa un vistazo a la variante de Yoshida de Leapfrog ; el enlace artcompsci en la sección de Referencias de la página de Wikipedia muestra cómo construir versiones de orden superior que son fáciles de implementar en el código.