Déjame comenzar con correcciones. No, odeint
no tiene integradores simplécticos. No, la integración simpléctica no significa conservación de energía.
¿Qué significa symplectic y cuándo debe usarlo?
En primer lugar, ¿qué significa symplectic? Simpléctico significa que la solución existe en una variedad simpléctica. Una variedad simpléctica es un conjunto de soluciones que se define mediante una forma 2. Los detalles de las variedades simplécticas probablemente suenan como tonterías matemáticas, por lo que la esencia de esto es que hay una relación directa entre dos conjuntos de variables en tal variedad. La razón por la cual esto es importante para la física es porque las ecuaciones de Hamilton naturalmente tienen que las soluciones residen en una variedad simpléctica en el espacio de fase, siendo la división natural los componentes de posición y momento. Para la verdadera solución hamiltoniana, ese camino de fase espacial es energía constante.
O (Δ tnorte)norte
Lo que esto significa es que los integradores simplécticos tienden a capturar los patrones a largo plazo mejor que los integradores normales debido a esta falta de deriva y esto casi garantiza la periodicidad. Este cuaderno muestra bien esas propiedades en el problema de Kepler . La primera imagen muestra de lo que estoy hablando con la naturaleza periódica de la solución.
Esto se resolvió utilizando el integrador simpléctico de sexto orden de Kahan y Li de DifferentialEquations.jl . Puede ver que la energía no está exactamente conservada, pero su variación depende de qué tan lejos esté el colector de solución perturbado del colector verdadero. Pero dado que la solución numérica en sí misma reside en una variedad simpléctica, tiende a ser casi exactamente periódica (con alguna deriva numérica lineal que puede ver), lo que lo hace muy bien para la integración a largo plazo. Si hace lo mismo con RK4, puede sufrir un desastre:
Puede ver que el problema es que no hay una verdadera periodicidad en la solución numérica y, por lo tanto, las horas extraordinarias tienden a derivar.
Esto resalta la verdadera razón para elegir integradores simplécticos: los integradores simplécticos son buenos en integraciones a largo plazo en problemas que tienen la propiedad simpléctica (sistemas hamiltonianos) . Así que veamos algunas cosas. Tenga en cuenta que no siempre necesita integradores simplécticos incluso en un problema simpléctico. Para este caso, un método adaptativo de Runge-Kutta de quinto orden puede funcionar bien. Aquí está Tsit5
:
Noten dos cosas. Uno, obtiene una precisión lo suficientemente buena como para que no se pueda ver la deriva real en el diagrama del espacio de fases. Sin embargo, en el lado derecho puede ver que existe esta deriva de energía, por lo que si realiza una integración lo suficientemente larga, este método no funcionará tan bien como el método de solución con las propiedades periódicas. Pero eso plantea la pregunta, ¿cómo le va con respecto a la eficiencia frente a la simple integración con extrema precisión? Bueno, esto es un poco menos seguro. En DiffEqBenchmarks.jl puede encontrar algunos puntos de referencia que investigan esta pregunta. Por ejemplo, este cuadernoexamina el error de energía frente al tiempo de ejecución en un sistema de ecuaciones de Hamilton de un modelo Boson cuádruple y muestra que si desea una precisión realmente alta, incluso para tiempos de integración bastante largos, es más eficiente usar un RK de alto orden o Runge-Kutta Nystrom ( RKN) método. Esto tiene sentido porque para satisfacer la propiedad simpléctica, los integradores renuncian a cierta eficiencia y tienen que ser un paso de tiempo fijo (hay algunas investigaciones que avanzan en este último pero no está muy avanzado).
Además, observe en estos dos cuadernos que también puede tomar un método estándar y proyectarlo nuevamente en la solución múltiple en cada paso (o cada pocos pasos). Esto es lo que están haciendo los ejemplos que utilizan la devolución de llamada de DifferentialEquations.jl ManifoldProjection . Verá que las garantías de las leyes de conservación se mantienen pero con un costo adicional de resolver un sistema implícito en cada paso. También puede usar un solucionador de ODE totalmente implícito o matrices de masas singulares para agregar ecuaciones de conservación, pero el resultado final es que estos métodos son más costosos computacionalmente como una compensación.
Para resumir, la clase de problemas en los que desea alcanzar un integrador simpléctico son aquellos que tienen una solución en una variedad simpléctica (sistemas hamiltonianos) en los que no desea invertir los recursos computacionales para tener una tolerancia muy exacta (tolerancia <1e-12
) solución y no necesita energía exacta / etc. conservación. Esto pone de relieve que se trata de propiedades de integración a largo plazo, por lo que no debería acudir a todas ellas como lo sugiere la literatura. Pero siguen siendo una herramienta muy importante en muchos campos, como la astrofísica, donde tienes integraciones a largo plazo que debes resolver lo suficientemente rápido sin tener una precisión absurda.
¿Dónde encuentro integradores simplécticos? ¿Qué tipo de integradores simplécticos existen?
Generalmente hay dos clases de integradores simplécticos. Existen los integradores simplécticos de Runge-Kutta (que son los que se muestran en los ejemplos anteriores) y hay métodos implícitos de Runge-Kutta que tienen la propiedad simpléctica. Como @origimbo menciona, los integradores simplécticos de Runge-Kutta requieren que les proporciones una estructura particionada para que puedan manejar la posición y las partes de momento por separado. Sin embargo, en contra del comentario, los métodos implícitos de Runge-Kutta son simplécticos sin requerir esto, sino que requieren resolver un sistema no lineal. Esto no es tan malo porque si el sistema no es rígido, este sistema no lineal puede resolverse con iteración funcional o aceleración de Anderson, pero los métodos RK simplécticos probablemente deberían preferirse por su eficiencia (
Dicho esto, odeint no tiene métodos de ninguna de estas familias , por lo que no es una buena opción si está buscando integradores simplécticos. En Fortran, el sitio de Hairer tiene un pequeño conjunto que puedes usar . Mathematica tiene algunos incorporados . Los solucionadores GSL ODE tienen integradores de puntos gaussianos RK implícitos que IIRC son simplécticos, pero esa es la única razón para usar los métodos GSL.
Pero el conjunto más completo de integradores simplécticos se puede encontrar en DifferentialEquations.jl en Julia (recuerde que esto se usó para los cuadernos anteriores). La lista de métodos simplécticos disponibles de Runge-Kutta se encuentra en esta página y notará que el método de punto medio implícito también es simpléctico (el método trapezoidal implícito de Runge-Kutta se considera "casi simpléctico" porque es reversible). No solo tiene el conjunto de métodos más grande, sino que también es de código abierto (puede ver el código y sus pruebas en un lenguaje de alto nivel) y tiene muchos puntos de referencia . Un buen cuaderno introductorio para usarlo para resolver problemas físicos es este cuaderno tutorial. Pero, por supuesto, se recomienda comenzar con el paquete a través del primer tutorial de ODE .
En general, puede encontrar un análisis detallado de las suites de ecuaciones diferenciales numéricas en esta publicación de blog . Es bastante detallado, pero dado que tiene que abarcar muchos temas, cada uno lo hace con menos detalles que este, así que no dude en solicitar que se amplíe de alguna manera.