Método de Runge-Kutta

Em análise numérica, os métodos de Runge–Kutta formam uma família importante de metódos iterativos implícitos e explícitos para a resolução numérica (aproximação) de soluções de equações diferenciais ordinárias. Estas técnicas foram desenvolvidas por volta de 1900 pelos matemáticos C. Runge e M.W. Kutta.

Veja o artigo sobre métodos numéricos para equações diferenciais ordinárias para maior entendimento e para outros métodos. Veja ainda a lista de métodos Runge-Kutta.

Trata-se de um método por etapas que tem a seguinte expressão genérica:

u n + 1 = u n + Δ t i = 1 e b i k i , {\displaystyle u^{n+1}=u^{n}+\Delta t\sum _{i=1}^{e}b_{i}k_{i},}

onde

k i = F ( u n + Δ t j = i e a i j k j ; t n + c i Δ t ) {\displaystyle k_{i}=F(u^{n}+\Delta t\sum _{j=i}^{e}a_{ij}k_{j};t_{n}+c_{i}\Delta t)} i = 1 , . . . , e {\displaystyle i=1,...,e}

com a i j , b i , c i {\displaystyle a_{ij},b_{i},c_{i}} constantes próprias do esquema numérico. Os esquemas Runge-Kutta podem ser explícitos ou implícitos dependendo das constantes a i j {\displaystyle a_{ij}} do esquema. Se esta matriz é triangular inferior com todos os elementos da diagonal principal iguais a zero; quer dizer, a i j = 0 {\displaystyle a_{ij}=0} para j = i , . . . , e , {\displaystyle j=i,...,e,} os esquemas são explícitos.

O método de runge-kutta é muitas vezes confundido com o metodo "predictor-corrector"sendo este o resultado da junção do método dos trapézios e do método de Euler.

O método Runge–Kutta clássico de quarta ordem

Um membro da família de métodos Runge–Kutta é usado com tanta frequência que costuma receber o nome de "RK4" ou simplesmente "o método Runge–Kutta".

Seja um problema de valor inicial (PVI) especificado como segue:

y = f ( t , y ) , y ( t 0 ) = y 0 . {\displaystyle y'=f(t,y),\quad y(t_{0})=y_{0}.}

Então o método RK4 para este problema é dado pelas seguintes equações:

y n + 1 = y n + h 6 ( k 1 + 2 k 2 + 2 k 3 + k 4 ) t n + 1 = t n + h {\displaystyle {\begin{aligned}y_{n+1}&=y_{n}+{h \over 6}\left(k_{1}+2k_{2}+2k_{3}+k_{4}\right)\\t_{n+1}&=t_{n}+h\\\end{aligned}}}

onde y n + 1 {\displaystyle y_{n+1}} é a aproximação por RK4 de y ( t n + 1 ) , {\displaystyle y(t_{n+1}),} e

k 1 = f ( t n , y n ) k 2 = f ( t n + h 2 , y n + h 2 k 1 ) k 3 = f ( t n + h 2 , y n + h 2 k 2 ) k 4 = f ( t n + h , y n + h k 3 ) {\displaystyle {\begin{aligned}k_{1}&=f\left(t_{n},y_{n}\right)\\k_{2}&=f\left(t_{n}+{h \over 2},y_{n}+{h \over 2}k_{1}\right)\\k_{3}&=f\left(t_{n}+{h \over 2},y_{n}+{h \over 2}k_{2}\right)\\k_{4}&=f\left(t_{n}+h,y_{n}+hk_{3}\right)\\\end{aligned}}}

Então, o próximo valor (yn+1) é determinado pelo valor atual (yn) somado com o produto do tamanho do intervalo (h) e uma inclinação estimada. A inclinação é uma média ponderada de inclinações:

  • k1 é a inclinação no início do intervalo;
  • k2 é a inclinação no ponto médio do intervalo, usando a inclinação k1 para determinar o valor de y no ponto tn + h/2 através do método de Euler;
  • k3 é novamente a inclinação no ponto médio do intervalo, mas agora usando a inclinação k2 para determinar o valor de y;
  • k4 é a inclinação no final do intervalo, com seu valor y determinado usando k3.

Ao fazer a média das quatro inclinações, um peso maior é dado para as inclinações no ponto médio:

inclinação = k 1 + 2 k 2 + 2 k 3 + k 4 6 . {\displaystyle {\mbox{inclinação}}={\frac {k_{1}+2k_{2}+2k_{3}+k_{4}}{6}}.}

O método RK4 é um método de quarta ordem, significando que o erro por passo é da ordem de h5, enquanto o erro total acumulado tem ordem h4.

Note que as fórmulas acima são válidas tanto para funções escalares quanto para funções vetoriais (ou seja, quando y pode ser um vetor e f {\displaystyle f} um operador). Por exemplo, pode-se integrar a equação de Schrödinger usando o operador Hamiltoniano como função f . {\displaystyle f.}

Métodos Runge–Kutta explícitos

A família de métodos Runge–Kutta explícitos é uma generalização do método RK4 mencionado acima.

Ela é dada por

y n + 1 = y n + h i = 1 s b i k i , {\displaystyle y_{n+1}=y_{n}+h\sum _{i=1}^{s}b_{i}k_{i},}
onde
k 1 = f ( t n , y n ) , {\displaystyle k_{1}=f(t_{n},y_{n}),}
k 2 = f ( t n + c 2 h , y n + a 21 h k 1 ) , {\displaystyle k_{2}=f(t_{n}+c_{2}h,y_{n}+a_{21}hk_{1}),}
k 3 = f ( t n + c 3 h , y n + a 31 h k 1 + a 32 h k 2 ) , {\displaystyle k_{3}=f(t_{n}+c_{3}h,y_{n}+a_{31}hk_{1}+a_{32}hk_{2}),}
{\displaystyle \vdots }
k s = f ( t n + c s h , y n + a s 1 h k 1 + a s 2 h k 2 + + a s , s 1 h k s 1 ) . {\displaystyle k_{s}=f(t_{n}+c_{s}h,y_{n}+a_{s1}hk_{1}+a_{s2}hk_{2}+\cdots +a_{s,s-1}hk_{s-1}).}

(Nota: as equações acima têm definições diferentes em diferentes textos, apesar de equivalentes).

Para especificar um método em particular, é necessário fornecer o inteiro s (número de estágios), e os coeficiêntes aij (para 1 ≤ j <is), bi (para i = 1, 2, ..., s) e ci (para i = 2, 3, ..., s). Esses dados são geralmente dispostos de forma mnemônica, conhecida como matriz de Butcher (de John Charles Butcher):

0
c 2 {\displaystyle c_{2}} a 21 {\displaystyle a_{21}}
c 3 {\displaystyle c_{3}} a 31 {\displaystyle a_{31}} a 32 {\displaystyle a_{32}}
{\displaystyle \vdots } {\displaystyle \vdots } {\displaystyle \ddots }
c s {\displaystyle c_{s}} a s 1 {\displaystyle a_{s1}} a s 2 {\displaystyle a_{s2}} {\displaystyle \cdots } a s , s 1 {\displaystyle a_{s,s-1}}
b 1 {\displaystyle b_{1}} b 2 {\displaystyle b_{2}} {\displaystyle \cdots } b s 1 {\displaystyle b_{s-1}} b s {\displaystyle b_{s}}

O método Runge–Kutta é consistente se

j = 1 i 1 a i j = c i   p a r a   i = 2 , , s . {\displaystyle \sum _{j=1}^{i-1}a_{ij}=c_{i}\ \mathrm {para} \ i=2,\ldots ,s.}

Existem ainda exigências extras se for imposto que o método tenha certa ordem p, significando que o erro de truncamento é O(hp+1). Tais condições podem ser deduzida da própria definição de erro de truncamento. Por exemplo, um método de 2 estágios tem ordem 2 se b1 + b2 = 1, b2c2 = 1/2, e b2a21 = 1/2.

Exemplos

O método RK4 se enquadra nesta categoria. Seu tableau é:

0
1/2 1/2
1/2 0 1/2
1 0 0 1
1/6 1/3 1/3 1/6

No entanto, o método Runge–Kutta mais simples é o (forward) Euler, dado pela fórmula y n + 1 = y n + h f ( t n , y n ) . {\displaystyle y_{n+1}=y_{n}+hf(t_{n},y_{n}).} Este é o único método Runge–Kutta explícito de um estágio que é consistente. A tableau correspondente é:

0
1

Um exemplo de um método de segunda ordem com dois estágios é o método do ponto médio (midpoint method, em inglês)

y n + 1 = y n + h f ( t n + h 2 , y n + h 2 f ( t n , y n ) ) . {\displaystyle y_{n+1}=y_{n}+hf\left(t_{n}+{\frac {h}{2}},y_{n}+{\frac {h}{2}}f(t_{n},y_{n})\right).}
A tableau correspondente é:

0
1/2 1/2
0 1

Note que este método do 'ponto médio' não é o método RK2 ótimo. Uma alternativa é fornecida pelo método de Heun, onde os 1/2's da tableau acima são simplesmente substituídos por 1's. Caso se queira minimizar o erro de truncamento, o método abaixo deve ser utilizado (Atkinson p. 423). Outros métodos importantes são Fehlberg, Cash-Karp e Dormand-Prince. Leia ainda, o artigo sobre tamanho de passo Adaptativo.

Uso

O que segue é um exemplo de uso de um método Runge–Kutta explícito de dois estágios:

0
2/3 2/3
1/4 3/4

para resolver o problema de valor inicial

y = ( tan y ) + 1 , y ( 1 ) = 1 ,   t [ 1 , 1.1 ] {\displaystyle y'=(\tan {y})+1,\quad y(1)=1,\ t\in [1,1.1]}
com tamanho de passo h=0.025.

A tableau acima gera as seguintes equações equivalentes que definem o método:

k 1 = y n {\displaystyle k_{1}=y_{n}}
k 2 = y n + 2 / 3 h f ( t n , k 1 ) {\displaystyle k_{2}=y_{n}+2/3hf(t_{n},k_{1})}
y n + 1 = y n + h ( 1 / 4 f ( t n , k 1 ) + 3 / 4 f ( t n + 2 / 3 h , k 2 ) ) {\displaystyle y_{n+1}=y_{n}+h(1/4f(t_{n},k_{1})+3/4f(t_{n}+2/3h,k_{2}))}

t 0 = 1 {\displaystyle t_{0}=1}
y 0 = 1 {\displaystyle y_{0}=1}
t 1 = 1.025 {\displaystyle t_{1}=1.025}
k 1 = y 0 = 1 {\displaystyle k_{1}=y_{0}=1} f ( t 0 , k 1 ) = 2.557407725 {\displaystyle f(t_{0},k_{1})=2.557407725} k 2 = y 0 + 2 / 3 h f ( t 0 , k 1 ) = 1.042623462 {\displaystyle k_{2}=y_{0}+2/3hf(t_{0},k_{1})=1.042623462}
y 1 = y 0 + h ( 1 / 4 f ( t 0 , k 1 ) + 3 / 4 f ( t 0 + 2 / 3 h , k 2 ) ) = 1.066869388 {\displaystyle y_{1}=y_{0}+h(1/4*f(t_{0},k_{1})+3/4*f(t_{0}+2/3h,k_{2}))=1.066869388}
t 2 = 1.05 {\displaystyle t_{2}=1.05}
k 1 = y 1 = 1.066869388 {\displaystyle k_{1}=y_{1}=1.066869388} f ( t 1 , k 1 ) = 2.813524695 {\displaystyle f(t_{1},k_{1})=2.813524695} k 2 = y 1 + 2 / 3 h f ( t 1 , k 1 ) = 1.113761467 {\displaystyle k_{2}=y_{1}+2/3hf(t_{1},k_{1})=1.113761467}
y 2 = y 1 + h ( 1 / 4 f ( t 1 , k 1 ) + 3 / 4 f ( t 1 + 2 / 3 h , k 2 ) ) = 1.141332181 {\displaystyle y_{2}=y_{1}+h(1/4*f(t_{1},k_{1})+3/4*f(t_{1}+2/3h,k_{2}))=1.141332181}
t 3 = 1.075 {\displaystyle t_{3}=1.075}
k 1 = y 2 = 1.141332181 {\displaystyle k_{1}=y_{2}=1.141332181} f ( t 2 , k 1 ) = 3.183536647 {\displaystyle f(t_{2},k_{1})=3.183536647} k 2 = y 2 + 2 / 3 h f ( t 2 , k 1 ) = 1.194391125 {\displaystyle k_{2}=y_{2}+2/3hf(t_{2},k_{1})=1.194391125}
y 3 = y 2 + h ( 1 / 4 f ( t 2 , k 1 ) + 3 / 4 f ( t 2 + 2 / 3 h , k 2 ) ) = 1.227417567 {\displaystyle y_{3}=y_{2}+h(1/4*f(t_{2},k_{1})+3/4*f(t_{2}+2/3h,k_{2}))=1.227417567}
t 4 = 1.1 {\displaystyle t_{4}=1.1}
k 1 = y 3 = 1.227417567 {\displaystyle k_{1}=y_{3}=1.227417567} f ( t 3 , k 1 ) = 3.796866512 {\displaystyle f(t_{3},k_{1})=3.796866512} k 2 = y 3 + 2 / 3 h f ( t 3 , k 1 ) = 1.290698676 {\displaystyle k_{2}=y_{3}+2/3hf(t_{3},k_{1})=1.290698676}
y 4 = y 3 + h ( 1 / 4 f ( t 3 , k 1 ) + 3 / 4 f ( t 3 + 2 / 3 h , k 2 ) ) = 1.335079087 {\displaystyle y_{4}=y_{3}+h(1/4*f(t_{3},k_{1})+3/4*f(t_{3}+2/3h,k_{2}))=1.335079087}

As soluções numéricas correspondem aos valores sublinhados. Note que f ( t i , k 1 ) {\displaystyle f(t_{i},k_{1})} foi calculado evitando refazer os cálculos em y i {\displaystyle y_{i}} s.

Ligações externas

  • «Runge-Kutta» 
  • «Método Runge-Kutta de 4ª ordem» (PDF) 
  • «Método Runge Kutta para E.D.O's» 
  • «Método de Runge-Kutta». omonitor.io. Consultado em 28 de março de 2016 

Referências gerais

  • J. C. Butcher, Numerical methods for ordinary differential equations, ISBN 0471967580
  • George E. Forsythe, Michael A. Malcolm, and Cleve B. Moler. Computer Methods for Mathematical Computations. Englewood Cliffs, NJ: Prentice-Hall, 1977. (See Chapter 6.)
  • Ernst Hairer, Syvert Paul Nørsett, and Gerhard Wanner. Solving ordinary differential equations I: Nonstiff problems, second edition. Berlin: Springer Verlag, 1993. ISBN 3-540-56670-8.
  • William H. Press, Brian P. Flannery, Saul A. Teukolsky, William T. Vetterling. Numerical Recipes in C. Cambridge, UK: Cambridge University Press, 1988. (See Sections 16.1 and 16.2.)
  • «Runge-Kutta 4th-order method textbook notes, PPT, Matlab Mathematica Maple Mathcad»  at Holistic Numerical Methods Institute
  • Kendall E. Atkinson. An Introduction to Numerical Analysis. John Wiley & Sons - 1989
  • F. Cellier, E. Kofman. Continuous System Simulation. Springer Verlag, 2006. ISBN 0-387-26102-8.
  • v
  • d
  • e
Sistema de equações diferenciais
Equações diferenciais
parciais
Métodos analíticos
Métodos numéricos
Pessoas
Outros