¿Cómo usaría la jerarquía un simulador de órbita numérica de n cuerpos en su jacobiano?

Esta pregunta es sobre técnicas para calcular órbitas.

La publicación de Github sobre la estabilidad dinámica del sistema Jool modificado de Principia (citado en esta respuesta ) dice:

Principia calcula la trayectoria de los cuerpos celestes integrando las ecuaciones de movimiento1; como resultado, si el sistema es inestable, puede fallar en el juego. De hecho, este es el caso del sistema stock: mientras que los detalles dependen de cómo los elementos orbitales keplerianos de KSP se traducen a un estado inicial cartesiano, con la interpretación de Principia como elementos jerárquicos de Jacobi , el sistema Jool se descompone en 19 días, con un encuentro cercano entre Vall y Laythe.

Por Wikipedia :

En cálculo vectorial, la matriz jacobiana de una función vectorial en varias variables es la matriz de todas sus derivadas parciales de primer orden. Cuando esta matriz es cuadrada, es decir, cuando la función toma como entrada el mismo número de variables que el número de componentes vectoriales de su salida, su determinante se denomina determinante jacobiano. Tanto la matriz como (si corresponde) el determinante a menudo se denominan simplemente jacobiano en la literatura.

Cuando realizo la integración numérica para los problemas a los que me enfrento actualmente, solía usar el antiguo scipy.integrate.odeint pero estoy cambiando a scipy.integrate.solve_ivp y este último dice:

Parámetros: fun callable: Lado derecho del sistema. La firma de llamada es divertida (t, y). Aquí t es un escalar, y hay dos opciones para el ndarray y: Puede tener forma (n,); entonces fun debe devolver array_like con forma (n,). Alternativamente, puede tener forma (n, k); entonces fun debe devolver un array_like con forma (n, k), es decir, cada columna corresponde a una sola columna en y. La elección entre las dos opciones está determinada por un argumento vectorizado (ver más abajo). La implementación vectorizada permite una aproximación más rápida del jacobiano por diferencias finitas (requerido para solucionadores rígidos) .

actualización: creo que esto podría ser una pista; un sistema jerárquico podría ser útil al estimar interacciones entre objetos que varían inversamente con el cuadrado de la distancia; es posible que desee evaluar solo las interacciones cuando los cuerpos en órbita pasan cerca uno del otro.

Nunca he usado un jacobiano, pero me gustaría entender esto más.

En el documento, la rigidez del problema durante un acercamiento cercano es un tema central.

La matriz que se muestra en la definición de Wikipedia parece plana, no jerárquica:

j i j = F i X j

o como sugiere el artículo, un montón de gradientes transpuestos.

Pregunta: ¿Qué significa exactamente la "interpretación como elementos jerárquicos de Jacobi" de un simulador numérico de n cuerpos ? ¿Cómo se usaría algún tipo de jerarquía en un jacobiano utilizado por un solucionador de problemas de n cuerpos? este o algo parecido?

¿Se usaría esto en el caso de un enjambre o constelación de pequeños satélites de la Tierra cuya interacción gravitacional no se considera, o los cuerpos necesitarían interactuar entre sí de alguna manera (gravitacional o receptivamente) antes de que dicha jerarquía tenga alguna utilidad?

No sé por los jacobianos, pero la jerarquía en las simulaciones de n cuerpos con n grande se usa para reducir la complejidad del ingenuo O (n ^ 2). Por ejemplo, el subsistema de Jool y sus lunas podría simularse de forma aislada y luego aproximarse como un solo cuerpo de masa puntual dentro del resto del sistema Kerbol; Kerbol y todos sus planetas y sus lunas podrían aproximarse como un solo cuerpo al nivel de simulación del cúmulo estelar local, y así sucesivamente.
@RussellBorogove Sí, este podría ser el tipo de cosas a las que se refiere. Estaba releyendo la documentación de scipy.integrate.solve_ivp, vi la palabra "aproximación" y luego agregué una sección de actualización al mismo tiempo.
No conozco simulaciones de n cuerpos, ni KSP, pero conozco jacobianos bastante bien (escribí un artículo sobre cómo calcularlos de manera más eficiente). Puedo decir esto: no conozco ningún jacobiano que se llame "jerárquico". El método de diferenciación finita usa la definición F ( X ) = ( F ( X + h ) F ( X ) ) / h para obtener la derivada de una función multivariante. Tal vez haya un método de cálculo que permita el cálculo ordenado y en paralelo para la diferenciación finita, pero no debería cambiar el resultado per se. Tenga en cuenta que la diferenciación finita es la mitad de la precisión de su computadora, consulte el documento de conferencia AAS 19-716.
@ChrisR gracias por eso, veo lo que quieres decir. Creo que RB y yo estamos explorando la posibilidad de que la jerarquía pueda estar en el subconjunto particular de los elementos que se calculan; uno solo podría molestarse en mejorar la precisión de dos planetas (en este caso) que están en órbitas adyacentes o muy cerca. No sé si es posible calcular solo algunos elementos de una matriz jacobiana y no otros y aún usarlo; tal vez algún algoritmo de integración inteligente pueda hacer eso.
De hecho, 'jerarquía' no es un concepto en las bibliotecas numéricas de Python (u otras) que tratan con jacobianos. Calcular el jacobiano por diferencia finita (como señala @ChrisR) o una función explícita (según lo determine usted al diferenciarlo e implementarlo simbólicamente) es a menudo una opción, según el enfoque numérico que elija. Existen ventajas y desventajas para cualquiera de los enfoques, dependiendo del problema en cuestión.
@uhoh, con diferenciación finita sería trivial no calcular partes específicas del jacobiano simplemente sin variar esa parte del vector de estado. La diferenciación automática también debería ser posible estableciendo la parte del número dual en cero para ese componente. Finalmente, para la derivada analítica, también es posible ignorar algunos componentes, aunque es complicado si su biblioteca usa matemática vectorial.

Respuestas (1)

¡Me reservo el derecho de estar totalmente equivocado en esto! Dicho esto, estoy lanzando esto en una respuesta en lugar de un comentario porque espero que pueda ser el trampolín para una respuesta sólida de la comunidad.

Dudo mucho que el texto en negrita se refiera a la matriz jacobiana (que presumiblemente contiene todos los parciales de primer orden de todas las variables del sistema entre sí). Más bien, dado que dicen que están convirtiendo la definición de KSP de dónde están los cuerpos celestes en la época (proporcionada en elementos keplerianos) a una forma cartesiana, espero que a continuación definan el sistema en una jerarquía de coordenadas de Jacobi, en las que las posiciones están coordinadas . relativo al baricentro de un sistema de n cuerpos para n pequeño. (En el texto en negrita, los autores usan el término "elementos de Jacobi", que no he encontrado antes, pero en otra parte de la documentación usan las "coordenadas de Jacobi" más estándar)

No estoy seguro de si esta jerarquía está codificada o asignada dinámicamente, pero de cualquier manera, sospecho que se usa principalmente para reducir el error de punto flotante en los cálculos de posición entre objetos cercanos. A diferencia de lo que han sugerido algunos comentarios, esto no significa que Principia se aproxime a la gravitación de n cuerpos al permitir que interactúen solo las masas cercanas; nuevamente (sospecho), este es únicamente un método para coordinar cuerpos mientras se mitiga el error de punto flotante en el posiciones.

Para obtener una respuesta definitiva, sugiero contactar a cualquiera de los Leroy, ya sea a través de Github o en esta discordia en la que se produce la discusión sobre el desarrollo de Principia (ya no estoy allí, pero egg siempre ha sido amable con mis preguntas sobre su número). métodos). ¡Por favor comparta con el SE lo que encuentre!

Oh, creo que esta resultará ser la respuesta correcta, sí. Nunca he oído hablar de las coordenadas de Jacobi, pero después de volver a leer " Estado inicial cartesiano , con la interpretación de Principia como elementos jerárquicos de Jacobi", ciertamente parece que esto es exactamente de lo que está hablando. ¡Gracias!