Je voudrais utiliser la méthode Runge-Kutta de 8e ordre (89) dans une application de mécanique / astrodynamique céleste, écrite en C ++, à l'aide d'une machine Windows. Par conséquent, je me demande si quelqu'un connaît une bonne bibliothèque / implémentation documentée et gratuite à utiliser? C'est correct s'il est écrit en C, tant qu'il n'y a pas de problèmes de compilation à prévoir.
Jusqu'à présent, j'ai trouvé cette bibliothèque (mymathlib) . Le code semble correct, mais je n'ai trouvé aucune information sur les licences.
Pouvez-vous m'aider en révélant certaines des alternatives que vous pourriez connaître et qui conviendraient à mon problème?
EDIT:
Je vois qu'il n'y a pas vraiment autant de codes sources C / C ++ disponibles que je m'y attendais. Par conséquent, une version Matlab / Octave serait également acceptable (doit toujours être gratuite).
la source
Si vous faites de la mécanique céleste sur de longues échelles de temps, l'utilisation d'un intégrateur Runge-Kutta classique ne préservera pas l'énergie. Dans ce cas, l'utilisation d'un intégrateur symplectique serait probablement préférable. Boost.odeint implémente également un schéma Runge-Kutta symplectique de 4ème ordre qui fonctionnerait mieux pendant de longs intervalles de temps. GSL ne met en œuvre aucune méthode symplectique, pour autant que je sache.
la source
résumant certains points:
DP5
) lorsque vous regardez à 4 chiffres de précision (les tolérances sont cependant beaucoup plus faibles pour cela. Les tolérances ne sont qu'un stade approximatif dans tous les problèmes). Au fur et à mesure que vous réduisez les tolérances, l'amélioration d'une méthode RK d'ordre élevé augmente, mais vous devrez peut-être commencer à utiliser des nombres plus précis.dop853
et DifferentialEquations.jlDP8
(qui sont les mêmes). La dernière méthode 853 ne peut pas être implémentée dans la version tableau standard d'une méthode Runge-Kutta car son estimateur d'erreur n'est pas standard. Mais cette méthode est beaucoup plus efficace et je ne recommanderais même pas d'utiliser les anciennes méthodes Fehlberg 7/8 ou DP 7/8.la source
Je voudrais ajouter que même si ce que Geoff Oxberry suggère pour une intégration à long terme (en utilisant des intégrateurs symplectiques) est vrai, dans certains cas, cela ne fonctionnera pas. Plus précisément, si vous avez des forces dissipatives, votre système ne conserve plus l'énergie, et vous ne pouvez donc pas recourir à des intégrateurs symplectiques dans ce cas. La personne qui posait la question parlait d'orbites terrestres basses, et ces orbites présentent une grande quantité de traînée atmosphérique, c'est-à-dire une force dissipative qui empêche d'utiliser de tels intégrateurs symplectiques.
Dans ce cas spécifique (et pour les cas où vous ne pouvez pas utiliser / n'avez pas accès à / ne souhaitez pas utiliser d'intégrateurs symplectiques), je recommanderais l'utilisation de l'intégrateur Bulirsch-Stoer si vous avez besoin de précision et d'efficacité sur de longues périodes. Il fonctionne bien par expérience et est également recommandé par les recettes numériques (Press et al., 2007).
la source
odex
n'a pas tendance à bien se passer . Donc, au moins pour les ODE de premier ordre et pour les tolérances>=1e-13
, l'extrapolation ne semble pas bien fonctionner et elle n'est généralement pas proche. Cela est conforme à l'allégation ci-dessus.