Ya escribí sobre los conceptos básicos de una simulación numérica en el artículo Cómo hacer una simulación numérica. En este artículo quiero hablar de un caso más específico que muchas veces se da en la física: la simulación de una ecuación diferencial.

La “solución” de una ecuación diferencial sería una expresión analítica como x(t) = algo que ya no depende ni de la función x(t) ni de una de sus derivadas. Hallar estas soluciones es un arte difícil; a veces demasiado difícil. Esto puede llegar a tanta desperación que se ha llegado a ofrecer una recompensa de un millón de dólares para dar la solución de la ecuación diferencial de Navier-Stokes – una cantidad decente para adquirir el equipo informático necesario para simularla.

Como ejemplo en este artículo usamos el movimiento de cuerpos celestes bajo el efecto de la gravedad. Este movimiento se puede describir en una ecuación diferencial. Es posible resolver esta ecuación diferencial para dos cuerpos y, debido a esto, se puede predicir con gran exactitud la posición de un planeta que gira alrededor del sol. Sin embargo, todavía no se ha hallado una solución exacta del problema de tres cuerpos.

Mientras no se puede hallar una ecuación analíticamente, no queda más remedio que simularla. Una simulación se suele hacer sobre el tiempo, es decir, se conoce un estado para un momento determinado y se calcula el estado para un instante después.

Para ello se hace uso de una característica fundamental de las ecuaciones diferenciales: que sean diferenciables – es decir que describen curvas sin salto ni esquinas. Cuando más de cerca veo una curva diferenciable, más se parece a una recta. Por ejemplo, si miro un círculo con una lupa, entonces sólo veo una parte del círculo. Cuando más pequeña es esta parte, más recta parece. Bajo un microscopio ya será difícil decidir si veo una parte de una recta o de un círculo. Esto sginifica, en matemático, que una aproximación de una curva por secciones rectas cortas es lo suficientemente buena cuando las secciones son lo suficientemente cortas. Esto resulta en eligir pasos lo suficientemente pequeños para una simulación numérica. Por simular sobre el tiempo, estos pasos son pasos de tiempo.

Cuando estos pasos son lo suficientemente pequeños, entonces puedo aproximar el problema por ecuaciones líneales. Por ejemplo, durante un instante corto T, el vuelo de la Tierra alrededor del sól sigue una recta. Durante este tiempo corto, la acceleración hacia el sol es constante. El algoritmo para calcular el movimiento de la Tierra o cualquier otro cuerpo celeste sería el siguiente.

  1. Para el momento n conozco la masa, la posición y las velocidades de todos los puntos de masa. Calculo la aceleración an que un cuerpo experimienta con la ley de Newtown, que es la suma vectorial de todas las acceleraciones gravitatorias que sufre este cuerpo por todos las demás masas.
  2. Considero la aceleración an constante durante un paso de tiempo T. Con este paso de tiempo calculo la velocidad: un+1 = an · T
  3. Considero también la velocidad un+1 constante durante un paso de tiempo T. Así hallo la nueva posición: xn+1 = un · T
  4. Con estos calculos conozco todos los datos para el instante n+1 y puedo comenzar una nueva iteración del algoritmo para el instante n+2 desde el punto 1.

Una simulación numérica es una aproximación. Debido a esto y la resolución numérica limitada de los ordenadores se acumulan errores significativos durante la simulación. Por ejemplo, los cuerpos podrían alcanzar velocidades cada vez mayores con el paso de tiempo – algo que no sucedería en la realidad. Por eso es habitual añadir factores de corrección. En el ejemplo podríamos forzar que la energía de movimiento total sea constante reduciendo o aumentando conjuntamiente las velocidades de todos los puntos de masa.

Suele requerir experiencia encontrar la mejor manera de “estabilizar” la simulación numérica, es decir, conseguir que se ajuste a la realidad física durante un tiempo idealmente infinito. A veces se hace un análisis matemático exhaustivo para entender los errores sistemáticos, por ejemplo, por qué la energía total tiene tendencia de aumentar. Al final no se hacen las simulaciones numéricas porque son fáciles, sino porque hallar la solución de la ecuación diferencial fue imposible.

Otra manera de mejorar la calidad de una simulación es variar la longitud de paso de tiempo. Cuando más corto es, más se aproxima el resultado a la realidad, pero menos tiempo total simulo con el mismo esfuerzo. Idealmente puedo ajustar la longitud del paso del tiempo según la situacición. Por ejemplo, la aceleración entre dos puntos de masa alejados entre sí no varia mucho y, por lo tanto, no cometo mucho error a tomar la aceleración constante. En cambio, en un momento drámatico de acercamiento veloz, la dirección y magnitud de la aceleración cambian rápidamente. En esta situación debo acortar el paso de tiempo si quiero mantener la misma magnitud de error en el cálculo.

A veces conviene transformar una ecuación diferencial en otra forma más ventajosa para la simulación numérica. Conseguir que encima el algoritmo de una simulación sea estable requiere a menudo un gran conocmiento matemático. Sin embargo, las versiones más simples y menos exactos son a menudo la base para video-juegos o animaciones bastante impresionantes. Por eso son también un reto acequible para aprendices en programacion.

Como no existe un “completamente correcto” en una simulación numérica, son una herramienta de enseñanza ideal, cuando el camino es la meta y no el resultado final. La programación de ecuaciones diferenciales es un camino en que se puede aprender mucha programación.

Referencias