Eu gostaria de usar o método de 8ª ordem Runge-Kutta (89) em um aplicativo de mecânica / astrodinâmica celeste, escrito em C ++, usando uma máquina Windows. Portanto, pergunto-me se alguém conhece uma boa biblioteca / implementação documentada e livre para usar? Tudo bem se estiver escrito em C, desde que não haja nenhum problema de compilação esperado.
Até agora encontrei esta biblioteca (mymathlib) . O código parece bom, mas não encontrei nenhuma informação sobre licenciamento.
Você pode me ajudar, revelando algumas das alternativas que você talvez conheça e que atendam ao meu problema?
EDIT:
Vejo que realmente não existem muitos códigos-fonte C / C ++ disponíveis como eu esperava. Portanto, uma versão do Matlab / Octave também ficaria bem (ainda precisa ser livre para usar).
fonte
Se você estiver fazendo mecânica celeste em longas escalas de tempo, o uso de um integrador Runge-Kutta clássico não economizará energia. Nesse caso, o uso de um integrador simplético provavelmente seria melhor. O Boost.odeint também implementa um esquema Runge-Kutta simplético de quarta ordem que funcionaria melhor por longos intervalos de tempo. A GSL não implementa nenhum método simplético, até onde eu sei.
fonte
resumindo alguns pontos:
DP5
) quando você olha com 4 dígitos de precisão (as tolerâncias são muito mais baixas para isso. As tolerâncias são apenas uma estimativa em qualquer problema). À medida que você reduz as tolerâncias, diminui ainda mais a melhoria de um método RK de ordem superior, mas pode ser necessário começar a usar números de precisão mais altos.dop853
e DifferentialEquations.jlDP8
(que são iguais). O último método 853 não pode ser implementado na versão padrão do método Runge-Kutta, pois o estimador de erros não é padrão. Mas esse método é muito mais eficiente e eu não recomendaria nem o uso dos métodos Fehlberg 7/8 ou DP 7/8 mais antigos.fonte
Gostaria de acrescentar que, embora o que Geoff Oxberry sugira para integração a longo prazo (usando integradores simpléticos) seja verdadeiro, em alguns casos não funcionará. Mais especificamente, se você possui forças dissipativas, seu sistema não preserva mais a energia e, portanto, você não pode recorrer a integradores simpléticos nesse caso. A pessoa que fez a pergunta estava falando sobre órbitas baixas da Terra, e essas órbitas exibem uma grande quantidade de arrasto atmosférico, que é uma força dissipativa que impede o uso de tais integradores simpléticos.
Nesse caso específico (e nos casos em que você não pode usar / não tem acesso / não deseja usar integradores simpléticos), eu recomendaria o uso do integrador Bulirsch-Stoer se precisar de precisão e eficiência em prazos longos. Funciona bem por experiência e também é recomendado pelas Receitas Numéricas (Press et al., 2007).
fonte
odex
não costumam sair muito bem. Portanto, pelo menos para ODEs de 1ª ordem e para tolerâncias>=1e-13
, a extrapolação não parece se sair bem e geralmente não chega nem perto. Isso está de acordo com a reivindicação acima.