Me gustaría usar el método de octavo orden Runge-Kutta (89) en una aplicación de mecánica / astrodinámica celestial, escrita en C ++, usando una máquina Windows. Por lo tanto, me pregunto si alguien conoce una buena biblioteca / implementación documentada y de uso gratuito. Está bien si está escrito en C, siempre que no haya problemas de compilación que se puedan esperar.
Hasta ahora he encontrado esta biblioteca (mymathlib) . El código parece estar bien, pero no he encontrado ninguna información sobre licencias.
¿Me pueden ayudar revelando algunas de las alternativas que podrían conocer y que se adaptarían a mi problema?
EDITAR:
veo que en realidad no hay tantos códigos fuente C / C ++ disponibles como esperaba. Por lo tanto, una versión de Matlab / Octave también estaría bien (todavía tiene que ser de uso gratuito).
fuente
Si está haciendo mecánica celeste a largo plazo, el uso de un integrador clásico Runge-Kutta no preservará la energía. En ese caso, usar un integrador simpléctico probablemente sería mejor. Boost.odeint también implementa un esquema de Runge-Kutta simpléctico de cuarto orden que funcionaría mejor durante largos intervalos de tiempo. GSL no implementa ningún método simpléctico, por lo que puedo decir.
fuente
resumiendo algunos puntos:
DP5
) cuando está buscando 4 dígitos de precisión (las tolerancias son mucho más bajas para esto. Las tolerancias son solo un estadio en cualquier problema). A medida que reduce las tolerancias, la mejora de un método RK de alto orden aumenta, pero es posible que deba comenzar a usar números de mayor precisión.dop853
y DifferentialEquations.jlDP8
(que son los mismos). El último método 853 no se puede implementar en la versión de cuadro estándar de un método Runge-Kutta ya que su estimador de errores no es estándar. Pero este método es mucho más eficiente y no recomendaría incluso usar los métodos más antiguos Fehlberg 7/8 o DP 7/8.fuente
Me gustaría agregar que si bien lo que Geoff Oxberry sugiere para la integración a largo plazo (utilizando integradores simplécticos) es cierto, en algunos casos no funcionará. Más específicamente, si tiene fuerzas disipativas, su sistema ya no conserva la energía y, por lo tanto, no puede recurrir a integradores simplécticos en ese caso. La persona que hizo la pregunta estaba hablando de órbitas terrestres bajas, y tales órbitas exhiben una gran cantidad de resistencia atmosférica, que es una fuerza disipativa que impide el uso de integradores simplécticos.
En ese caso específico (y para los casos en los que no puede usar / no tiene acceso a / no quiere usar integradores simplécticos), recomendaría el uso del integrador Bulirsch-Stoer si necesita precisión y eficiencia a largo plazo. Funciona bien por experiencia, y también lo recomiendan las Recetas Numéricas (Press et al., 2007).
fuente
odex
no me va bien. Entonces, al menos para las EDO de primer orden y para las tolerancias>=1e-13
, la extrapolación no parece funcionar bien y, por lo general, ni siquiera está cerca. Esto está en línea con el reclamo anterior.