Eu estou tentando implementar a quarta ordem método de Runge-Kutta para resolver um primeiro ODE ordem em Python ou seja, . Eu entendo como o método funciona, mas estou tentando escrever um algoritmo eficiente que minimize o número de vezes quef(x,y)é calculado, pois isso é bastante caro. Disseram-me que é possível reutilizar pontos de dados que foram calculados anteriormente à medida que você aumenta as etapas, mas não consegue ver como. Alguém sabe como fazer isso ou não é possível?
ode
python
explicit-methods
joshlk
fonte
fonte
f(x,y)
para que os resultados sejam memorizados.Respostas:
Se você está indo de
yp_1 = f(x_1, y_1)
queyp_2 = f(x_1+h, y_2)
você vai precisar os pontos intermediários:Em geral, nenhum dos pontos intermediários é útil na próxima etapa. Porque
K1
<>K2
eK3
<>yp_2
.fonte
Se você quiser reutilizar avaliações de funções anteriores, precisará usar um método de várias etapas, como Adams-Bashforth.
De qualquer forma, você paga por cada estratégia. Os métodos de etapa única requerem o maior número de avaliações de funções, mas os métodos de várias etapas têm o maior requisito de memória.
Editar: Correção. Minha afirmação é verdadeira apenas para métodos explícitos. A situação é menos clara para métodos implícitos, pois o número de estágios não se traduz diretamente no número de avaliações de funções.
fonte
Sei que você está usando métodos Runge-Kutta para resolver sua ODE, mas se você deseja reutilizar valores calculados antigos de seu f (x, y), convém considerar métodos de várias etapas, como Adams-Bashforth ou Adams-Moulton métodos. Obviamente, a desvantagem desses métodos é que você não pode usar o tempo adaptativo muito facilmente.
fonte
Por favor, verifique os métodos "incorporados": o objetivo neste tipo de métodos RK é ter dois métodos com ordens diferentes, onde o método de ordem superior usa as mesmas avaliações de função que o método de ordem baixa. Isso permite uma estimativa de erro muito eficiente. Veja a p.165 e mais em "Resolvendo Equações Diferenciais Ordinárias I: Problemas não-rígidos", de Hairer, Norsett e Wanner. Exemplos típicos são os métodos de Fehlberg da ordem 7 (8).
Além disso, se você estiver procurando resolver ODEs no PYTHON, consulte o assimulo . Eu jogo com este pacote há algumas semanas e estou muito feliz.
fonte