Tamanho atual da fonte:

Videoaula

Métodos de Runge Kutta

Por volta do ano 1900, dois matemáticos alemães, Carl David Tolmé Runge e Martin Wilhelm Kutta, aprimoraram os métodos iterativos para resoluções de Equações Diferenciais Ordinárias de uma forma extremamente precisa.

Como Heun, eles perceberam que quanto mais inclinações (derivadas) fossem calculadas, melhor seria a precisão, sendo cada inclinação associada a um determinado coeficiente de compensação.

Assim, analisando o trabalho de Heun, foi possível dar continuidade àquele raciocínio já desenvolvido pelo Alemão.

Métodos de Runge Kutta de ordem 2 (RK2)

A versão de segunda ordem para o método de RK segue a seguinte equação:
$$ {y_{i+1} = y_i + (a_1k_1 + a_2k_2)h}, $$

em que
$$k_1 = f(x_i,y_i),$$ $$k_2 = f(x_i + p_1h, y_i + q_{11}k_1h).$$
Os valores $a_1, a_2, p_1$ e $q_{11}$ são calculados igualando-se a primeira equação à expansão em série de Taylor até os termos de 2º grau. Fazendo isso, deduzimos três equações para calcular as quatro constantes desconhecidas. As três equações são:

$${a_1 + a_2 = 1,}$$ $${a_2p_1 = \frac{1}{2}},$$ $${a_2q_{11} = \frac{1}{2}}.$$
Nós podemos adotar quaisquer valores para as constantes $a_2$ ou $a_1$, posteriormente fazendo o valor adotado obedecer o conjunto de equações, ou seja, nós teremos infinitas maneiras de escrever o método de segunda ordem de RK.

Se fizermos, por exemplo, $a_1 = 0$, $a_2$ será igual a $1. Então teremos

$$y_{i+1} = y_i + (a_1k_1 + a_2k_2)h.$$ Substituindo $a_1$ e $a_2$,
$$y_{i+1} = y_i + k_2h,$$ e nossas inclinações serão:

$$k_1 = f(x_i,y_i).$$
Para encontrarmos $k_2$ teremos que resolver as equações que restaram. Assim sendo, temos que

$$a_2p_1 = \frac{1}{2}.$$ Subtituindo o valor de $a_2 (a_2 = 1)$,
$$p_1 = \frac{1}{2}$$ e $$q_{11} = \frac{1}{2}.$$ Dessa forma, a segunda inclinação será: $$k_2 = f(x_i + \frac{1}{2}h, y_i + \frac{1}{2}k_1h).$$ Perceba que essa maneira que escrevemos o método de segunda ordem, na verdade, corresponde ao método do Ponto Médio, que já conhecemos.

Se fizermos agora $a_1 = \frac{1}{2}$, a partir disso (usando o conjunto de equações) podemos calcular que $a_2 = \frac{1}{2}$. Isso nos dará a seguinte equação para o calculo do próximo valor de $y$: $$ {y_{i+1} = y_i + (\frac{1}{2}k_1 + \frac{1}{2}k_2)h}, $$ $$k_1 = f(x_i, y_i),$$ e $a_1p_1 = \frac{1}{2}$. Então, $p_1 = 1$ e $a_2q_{11} = \frac{1}{2}$ implica que $q_{11} = 1$. Sendo assim, $$k_2 = f(x_i + h, y_i + q_{11}k_1h).$$ Essa expressão para o método de RK de segunda ordem também já vimos, ela é o método desenvolvido por $Heun$.

Dessa forma, podemos ver que realmente há infinitas formas de escrevermos a expressão para calcular numéricamente uma EDO usando o método de RK2, sendo Ponto Médio e Heun casos particulares dos métodos de Runge-Kutta.

Métodos de Runge Kutta de ordem 3 (RK3)

A dedução do Método de Runge-Kutta de Terceira Ordem é bem parecida com a dos métodos de segunda ordem. O resultado é um conjunto de seis equações com oito incógnitas. Portanto, devem ser especificados valores, a priori, para as duas incógnitas (como fizemos em RK2) para determinar os parâmetros restantes. Uma, dentre as vesões mais comuns para RK3 é:

$$ {y_{i+1} = y_i + \frac{1}{6}(k_1 + 4k_2 + k_3)h}, $$ em que

$$k_1 = f(x_i,y_i),$$ $$k_2 = f(x_i + \frac{1}{2}h, y_i + \frac{1}{2}k_1h),$$ $$k_3 = f(x_i + h, y_i - k_1h + 2k_2h).$$

Nesta versão, $k_1$ e $k3$ tem o peso $1$ e $k_2$ tem peso $4$. Devemos lembrar que esse método se trata de um caso particular dos métodos de RK de 3ª ordem.

Métodos de Runge Kutta de ordem 4 (RK4)

Os métodos de RK4 são os de maior precisão que usaremos aqui no curso. Esses métodos já nos dão uma boa aproximação comparada à resolução analítica da EDO. A seguir, veremos a forma mais comumente usada, que ficou conhecida como método RK de quarta ordem clássico:

Podemos observar que a ordem do método, na verdade, corresponde ao número de inclinações que teremos de calcular, ou seja, fica claro que para o método de RK4, nós teremos quatro inclinações com novos pesos:

$$ {k_1 = f(x_i,y_i)}, $$ $$ \begin{aligned} k_2 &= f(x_{i+1}, \tilde{y}_{i+1}) \\ &= f(x_i + \frac{1}{2}h, y_i + \frac{1}{2}k_1 h), \end{aligned} $$ $$ \begin{aligned} k_3 &= f(x_{i+1}, \tilde{y}_{i+1}) \\ &= f(x_i + \frac{1}{2}h, y_i + \frac{1}{2}k_2 h), \end{aligned} $$ $$ \begin{aligned} k_4 &= f(x_{i+1}, \tilde{y}_{i+1}) \\ &= f(x_i + h, y_i + k_3h). \end{aligned} $$ A inclinação resultante será: $$ {k = \frac{1}{6}(k_1 + 2k_2 + 2k_3 + k_4)}. $$ Sendo assim, já podemos calcular o próximo valor de $y$:
$$ {y_{i+1} = y_i + kh}. $$ Ilustrando o método graficamente:



Exemplo para Rk4

Usando o método de Runge Kutta de quarta ordem, resolva a seguinte equação diferencial
$$\frac{dy}{dx} = -1.2y + 7 e^{-0.3x} = g(x,y)$$
de $a = 0$ até $b = 2.5$ com um passo $h = 0.5$ e condição inicial $y = 3$ em $x = 0$. Compare o resultado com a solução analítica:
$$y = \frac{70}{9}e^{-0.3x} - \frac{43}{9}e^{-1.2x}.$$
Solução:

O primeiro ponto da solução é $(0;3)$, que corresponde a condição inicial. Ou seja, no ponto ${i = 1}$ temos ${x_1 = 0}$ e ${y_1 = 3}$. Para o segundo ponto, calcularemos primeiro as inclinações:
$$ \begin{aligned} k_1 &= g(x_1,y_1)\\ &= -1.2*3 + 7*e^{-0.3*0} = 3.4 \\ k_2 &= g(x_1 + \frac{h}{2}, y_1 + k_1\frac{h}{2}) \\ &= g(0+0.25, 3 + 3.4*0.25) = g(0.25, 3.85) \\ &= -1.2*3.85 + 7*e^{-0.3*0.25} = 1.874 \\ k_3 &= g(x_1+\frac{h}{2},y_1+k_3\frac{h}{2}) \\ &= g(0+0.25, 3 + 1.874*0.25) = g(0.25, 3.468)\\ &= -1.2*3.468 + 7*e^{-0.3*0.25} = 2.332 \\ k_4 &= g(x_1 + h, y_1 + k_3h) \\ &= g(0+0.5, 3 + 2.332*0.5) = g(0.5, 4.166) \\ & = -1.2*4.166 + 7*e^{-0.3*0.5} = 1.026 \end{aligned} $$
Logo,
$$ y_{2} = y_1 + \frac{h}{6}(k_1+2k_2+2k_3+k4) $$
$$ \begin{aligned} y_{2} &= 3 + \frac{0.5}{6}(3.4+2*1.874+2*2.332+1.026) \\ &= 4.070 \end{aligned} $$
Comparando com o resultado da solução analítica:
$$ \begin{aligned} {y_a} &= \frac{70}{9}e^{-0.3*0} - \frac{43}{9}e^{-1.2*0} \\ &= 4.072 \end{aligned} $$
$$Erro = y_{a} - y_{2} = 4.072 - 4.070 = 0.002 $$


O restante da solução podemos ver na tabela a seguir:


${i}$ ${x_i}$ ${y_i}$ ${y_a}$ ${Erro}$ ${k_1}$ ${k_2}$ ${k_3}$ ${k_4}$
${1}$ ${0.000}$ ${3.000}$ ${3.000}$ ${0.000}$ ${}$ ${}$ ${}$ ${}$
${2}$ ${0.500}$ ${4.070}$ ${4.072}$ ${0.002}$ ${3.400}$ ${1.874}$ ${2.332}$ ${1.026}$
${3}$ ${1.000}$ ${4.320}$ ${4.323}$ ${0.003}$ ${1.141}$ ${0.363}$ ${0.597}$ ${-0.056}$
${4}$ ${1.500}$ ${4.168}$ ${4.170}$ ${0.002}$ ${0.001}$ ${-0.374}$ ${ -0.261}$ ${-0.564}$
${5}$ ${2.000}$ ${3.834}$ ${3.835}$ ${0.001}$ ${-0.538}$ ${-0.699}$ ${-0.651}$ ${-0.769}$
${6}$ ${2.500}$ ${3.435}$ ${3.436}$ ${0.001}$ ${-0.759}$ ${-0.809}$ ${-0.794}$ ${-0.818}$


Algoritmo para implementação computacional

Implementação Scilab

Exercícios - Método de Runge-Kutta de Ordem 4

Enunciado