Método de Runge-Kutta 2ª e 4ª ordem
Runge-Kutta 2ª ordem
No método explícito de euler tínhamos:
Sendo . Podemos reescrever como:
Onde e . Agor se supormos uma solução:
Com o termo adicional dependendo de uma posição genérica em um tempo genérico , isto é . Usando o fato de que , podemos escrever então que:
Agora lembrando a expansão em série de taylor que também vimos no método explícito e Euler:
Abrindo a segunda derivada, temos:
Substituindo então, e escrevendo apenas , temos a seguinte expansão em série de Taylor:
Vamos expandir . Uma expansão de Taylor de primeira ordem para uma função de 2 variáveis em torno de é dado por [1]:
Onde denota a derivada da função na variável . Para o nosso caso, temos então para uma expansão em torno de :
Expandindo então em torno de temos:
Aqui podemos notar que multiplica a expansão da função, então quando desprezamos os termos de segunda ordem da expansão de , deprezamos os termos de terceira ordem de . Substituindo então o aproximado e na equação 1, temos:
Manipulando:
Comparando a aproximação 3 com a expansão 2 temos a seguinte relação:
Diferentes conjuntos de valore satisfazem este sistema. O método do ponto médio é obtido se ecolhermos: , e :
Então:
O método de Heun é obtido se for escolhido e :
Uma observação, é que o erro global no algoritmo de Runge-Kutta de segunda ordem é e o local é .
Exemplo
import matplotlib.pyplot as plt #Biblioteca para plotar gráficos import numpy as np #Biblitoeca de cálculos científicos #Taxas de variação def fv(x,w2): #Velocidade return (-w2*x) def fx(v): return (v) #Posição #Constantes m=1 ; k= 1.; w2= k/m #Parâmetros dt = 0.0001 ; tau = 2*np.pi; tf=4*tau ; Np= int(tf/dt) #Valores iniciais x=[1]; v=[0]; t=[0]; E=[k*x[0]**2/2+m*v[0]**2/2] #Método Range-Kutta de segunda ordem, no método do ponto médio for it in range(Np): #Posição k1 = fx(v[it])*dt k2 = fx(v[it]+k1/2)*dt x.append(x[it]+k2) #Velocidade k1 = fv(x[it],w2)*dt k2 = fv(x[it]+k1/2,w2)*dt v.append(v[it]+k2) #Energia E.append(k*x[it+1]**2/2+m*v[it+1]**2/2) #Tempo t.append(dt+it*dt) plt.plot(t,x) plt.plot(t,v) plt.plot(t,E) #plt.plot(x,v)
Runge-Kutta 4ª ordem
Exemplo
Principais materiais utilizados
- Runge-Kutta Methods (Michael Zeltkevic, Instituto de Tecnologia de Massachusetts)
- Second Order Runge-Kutta (Erik Cheever, Swarthmore)
Citações
- ↑ Taylor Polynomials of Functions of Two Variables ( Paul Seeburger, LibreTexts)