Runge-Kutta e reutilização de dados

11

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?dydx=f(x,y)f(x,y)

joshlk
fonte
Pesquisa "memorização". Você pode "embrulhar" facilmente f(x,y)para que os resultados sejam memorizados.
2
@ S.Lott: O termo é "memorização", sem o "r".
1
@ DietrichEpp: Totalmente correto. O Mac OS X possui um verificador ortográfico novo e agressivo, sem conhecimento técnico.
Este é um sistema de 2ª ordem simulado com um método de 4ª ordem?
Aqui está uma lista enorme de soluções alternativas: google.com/… Qualquer uma delas provavelmente será útil.

Respostas:

8

Se você está indo de yp_1 = f(x_1, y_1)que yp_2 = f(x_1+h, y_2)você vai precisar os pontos intermediários:

K1 = f(x_1+h/2, y_1+h/2*yp_1)
K2 = f(x_1+h/2, y_1+h/2*K1)
K3 = f(x_1+h, y_1+h*K2)

x_2 = x_1 + h
y_2 = y_1 + h/6*(yp_1+2*K1+2*K2+K3)
yp_2 = f(x_2, y_2)

Em geral, nenhum dos pontos intermediários é útil na próxima etapa. Porque K1<> K2e K3<> yp_2.

ja72
fonte
4

N NN=4N

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.

Reid.Atcheson
fonte
Eu provavelmente deveria ser um pouco mais específico. Veja Butcher para mais detalhes: Butcher, JC e J. Wiley. Métodos Numéricos para Equações Diferenciais Ordinárias. Wiley Online Library, 2008. Excelente referência para soluções ODE e também fornece muitas provas de inexistência de métodos RK (por exemplo, não existe o método Runge-Kutta da ordem 5, que usa apenas 4 avaliações de função.)
Reid.Atcheson
1
Para ser completo: suas reivindicações não são verdadeiras para "métodos gerais de Runge-Kutta", mas apenas para métodos explícitos de Runge-Kutta.
David Ketcheson
Ops! Você está certo, desculpe por isso.
Reid.Atcheson
1

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.

Paulo
fonte
0

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.

GertVdE
fonte