| | | |

Matemática numérica II

Ajude a manter o site livre, gratuito e sem propagandas. Colabore!

4.3 Métodos de Runge-Kutta

Seja um PVI da forma

y′=f⁢(t,y),t0<t≤tf, (4.150)
y⁢(t0)=y0, (4.151)

onde y:[t0,tf]↦ℝ é a função incógnita, dada f:[t0,tf]×ℝ→ℝ e dado valor inicial y0∈ℝ. Seguimos usando a notação y(k)≈y⁢(t(k)), t(k)=t0+k⁢h, k=0,1,2,…,n, h=(tf−t0)/n.

Os métodos de Runge666Carl David Tolmé Runge, 1856 - 1927, matemático alemão. Fonte: Wikipédia: Carl Runge.-Kutta777Martin Wilhelm Kutta, 1867 - 1944, matemático alemão. Fonte: Wikipédia: Martin Wilhelm Kutta. de s-estágios são métodos de passo simples da seguinte forma

y(k+1)=y(k)+h⁢∑i=1sci⁢ϕi⁢(t(k),y(k))⏟:=Φ⁢(t(k),y(k)), (4.152)

onde

ϕ1:=f⁢(t(k),y(k)), (4.153)
ϕ2:=f⁢(t(k)+α2⁢h,y(k)+h⁢β2,1⁢ϕ1), (4.154)
ϕ3:=f⁢(t(k)+α3⁢h,y(k)+h⁢(β3,1⁢ϕ1+β3,2⁢ϕ2)), (4.155)
⋮
ϕs:=f⁢(t(i)+αs⁢h,y(i)+h⁢∑j=1s−1βs,j⁢ϕj), (4.156)

com os coeficientes ci,αi, i=1,2,…,s e βi,j, j=1,2,…,s−1, escolhidos de forma a obtermos um método de passo simples com erro local da ordem desejada.

Na sequência, discutimos alguns dos métodos de Runge-Kutta usualmente utilizados. Pode-se encontrar uma lista mais completa em [3, Cap. 8, Seção 3.2].

4.3.1 Métodos de Runge-Kutta de ordem 2

Precisamos apenas de 2 estágios para obtermos métodos de Runge-Kutta de ordem 2. Tomamos a forma

y(k+1)=y(k)+h⁢(c1⁢ϕ1+c2⁢ϕ2)⏟:=Φ⁢(t(k),y(k)) (4.157)

com

ϕ1⁢(t(k),y(k)):=f⁢(t(k),y(k)), (4.158)
ϕ2⁢(t(k),y(k)):=f⁢(t(k)+α2⁢h,y(k)+h⁢β2,1⁢f⁢(t(k),y(k))). (4.159)

Nosso objetivo é de determinar os coeficientes c1, c2, α2, β2,1 tais que o método (4.157) tenha erro de discretização local de O⁢(h2). Da definição do erro local (4.110)

τ⁢(t,y;h):=Δ⁢(t,y;h)−Φ⁢(t,y;h), (4.160)

e por polinômio de Taylor de y⁢(t)888Consulte (4.115) para mais detalhes sobre a expansão em polinômio de Taylor de Δ⁢(t,y;h).

Δ⁢(t,y;h)=f⁢(t,y⁢(t))+h2⁢dd⁢t⁢f⁢(t,y)+O⁢(h2) (4.161)
=f(t,y(t))+h2[ft(t,y)
+fy(t,y)f(t,y)]+O(h2). (4.162)

De (4.157), temos

Φ⁢(t,y;h)=c1⁢f⁢(t,y)+c2⁢f⁢(t+α2⁢h,y+h⁢β2,1⁢f⁢(t,y)) (4.163)

Agora, tomando a expansão por série de Taylor de Φ⁢(t,y;h), temos

Φ(t,y;h)=(c1+c2)f(t,y)+c2h[α2ft(t,y)
+β2,1fy(t,y)f(t,y))+O(h2). (4.164)

Então, por comparação de (4.162) e (4.164), temos

c1+c2=1 (4.165)
c2⁢α2=12 (4.166)
c2⁢β21=12. (4.167)

Este sistema tem mais de uma solução possível.

Método do Ponto Médio

O Método do Ponto Médio é um método de Runge-Kutta de ordem 2 proveniente da escolha de coeficientes

c1=0, (4.168)
c2=1, (4.169)
α2=12, (4.170)
β2,1=12. (4.171)

Logo, a iteração do Método do Ponto Médio é

y(0)=y0 (4.172)
y(k+1)=y(k)+h⁢f⁢(t(k)+h2,y(k)+h2⁢f⁢(t(k),y(k))), (4.173)

com k=0,1,2,…,n.

Exemplo 4.3.1.

Consideramos o seguinte PVI

y′−y=sen⁡(t)⁢,0<t≤1, (4.174)
y⁢(0)=12. (4.175)

Na Tabela 4.3, temos as aproximações y~⁢(1)≈y⁢(1) computadas pelo Método do Ponto Médio com diferentes passos h.

h y~⁢(1) |y~⁢(1)−y⁢(1)|
10−1 2.02175 5.6⁢e−03
10−2 2.02733 6.0⁢e−05
10−3 2.02739 6.1⁢e−07
10−4 2.02740 6.1⁢e−09
10−5 2.02740 6.1⁢e−11
10−6 2.02740 1.9⁢e−12
Tabela 4.3: Resultados referentes ao Exemplo 4.3.1.
Código 10: pm.py
1import numpy as np
2
3def pm(f, t0, y0, h, n):
4 t = t0
5 y = y0
6 for k in range(n):
7 ya = y + h/2*f(t, y)
8 y += h*f(t+h/2, ya)
9 t += h
10 return t, y
11
12def f(t, y):
13 return y + np.sin(t)
14
15# analítica
16def exata(t):
17 return np.exp(t) - 0.5*np.sin(t) - 0.5*np.cos(t)
18
19h = 1e-1
20n = round(1./h)
21t,y = pm(f, 0., 0.5, h, n)
22print(f'{h:.1e}: {y:.5e} {np.abs(y-exata(1)):.1e}')

Método de Euler Modificado

O Método de Euler Modificado é um método de Runge-Kutta de ordem 2 proveniente da escolha de coeficientes

c1=12, (4.176)
c2=12, (4.177)
α2=1, (4.178)
β21=1. (4.179)

Logo, a iteração do Método de Euler Modificado é

y(0)=y0 (4.180)
y(k+1)=y(k)+h2[f(t(k),y(k)) (4.181)
+f(t(k)+h,y(k)+hf(t(k),y(k)))]. (4.182)
Exemplo 4.3.2.

Consideremos o seguinte problema de valor inicial

y′−y=sen⁡(t),t>0 (4.183)
y⁢(0)=12. (4.184)

Na Tabela 4.4, temos as aproximações y~⁢(1) de y⁢(1) computadas pelo Método de Euler modificado com diferentes passos h.

h y~⁢(1) |y~⁢(1)−y⁢(1)|
10−1 2.02096 6.4⁢e−03
10−2 2.02733 6.9⁢e−05
10−3 2.02739 6.9⁢e−07
10−4 2.02740 6.9⁢e−09
10−5 2.02740 6.9⁢e−11
10−6 2.02740 2.0⁢e−12
Tabela 4.4: Resultados referentes ao Exemplo 4.3.2
Código 11: eulerm.py
1import numpy as np
2
3def eulerm(f, t0, y0, h, n):
4 t = t0
5 y = y0
6 for k in range(n):
7 ya = y + h*f(t, y)
8 y += h/2 * (f(t, y) \
9 + f(t+h, ya))
10 t += h
11 return t, y
12
13def f(t, y):
14 return y + np.sin(t)
15
16# analítica
17def exata(t):
18 return np.exp(t) - 0.5*np.sin(t) - 0.5*np.cos(t)
19
20h = 1e-1
21n = round(1./h)
22t,y = eulerm(f, 0., 0.5, h, n)
23print(f'{h:.1e}: {y:.5e} {np.abs(y-exata(1)):.1e}')

4.3.2 Método de Runge-Kutta de ordem 4

Um dos métodos de Runge-Kutta mais empregados é o seguinte método de ordem 4:

y(0)=y0, (4.185)
y(k+1)=y(k)+h6⁢(ϕ1+2⁢ϕ2+2⁢ϕ3+ϕ4), (4.186)

com

ϕ1:=f⁢(t(k),y(k)), (4.187)
ϕ2:=f⁢(t(k)+h/2,y(k)+h⁢ϕ1/2), (4.188)
ϕ3:=f⁢(t(k)+h/2,y(k)+h⁢ϕ2/2), (4.189)
ϕ4:=f⁢(t(k)+h,y(k)+h⁢ϕ3), (4.190)
Exemplo 4.3.3.

Consideremos o seguinte PVI

y′−y=sen⁡(t),t>0 (4.191)
y⁢(0)=12. (4.192)

Na Tabela 4.5, temos as aproximações y~⁢(1)≈y⁢(1) computadas pelo Método de Runge-Kutta de Quarta Ordem com diferentes passos h.

h y~⁢(1) |y~⁢(1)−y⁢(1)|
10−1 2.02739 2.8⁢e−06
10−2 2.02740 3.1⁢e−10
10−3 2.02740 3.0⁢e−14
10−4 2.02740 4.4⁢e−14
Tabela 4.5: Resultados referentes ao Exemplo 4.3.3

4.3.3 Exercícios

E. 4.3.1.

Considere o seguinte problema de valor inicial

y′+e−y2+1=2,1<t≤2, (4.193)
y⁢(1)=−1. (4.194)

Use os seguintes métodos de Runge-Kutta com passo h=0,1 para computar o valor aproximado de y⁢(2):

  1. a)

    Método do Ponto Médio.

  2. b)

    Método de Euler Modificado.

  3. c)

    Método de Runge-Kutta de Quarta Ordem.


a) −6.00654⁢e−1; b) −6.00703⁢e−1; c) −5.99608⁢e−1

E. 4.3.2.

(4.144)-(4.145) Considere o seguinte problema de valor inicial

y′+cos⁡(t)=y,0<t≤1, (4.195)
y⁢(0)=12. (4.196)

A solução analítica é y⁢(t)=12⁢cos⁡(t)−12⁢sin⁡(t). Faça testes numéricos com h=10−1, 10−2, 10−3 e 10−4, observe os resultados obtidos e o erro ε:=|y~⁢(1)−y⁢(1)|, onde y~ corresponde a solução numérica. Faça testes para:

  1. a)

    Método do Ponto Médio.

  2. b)

    Método de Euler Modificado.

  3. c)

    Método de Runge-Kutta de Quarta Ordem.

O erro tem o comportamento esperado? Justifique sua resposta.

E. 4.3.3.

Considere os métodos de Runge-Kutta aplicados para computar a solução do PVI (4.144)-(4.145). Para cada um, faça um esboço do gráfico do erro e⁢(t;h=10−1)=|y~⁢(t)−y⁢(t)| e verifique se ele tem a forma esperada conforme a estimativa do erro global (4.125).


Dica: o gráfico de e⁢(t;h=10−1) tem a forma de uma função exponencial crescente para todos os métodos de R-K.

E. 4.3.4.

Mostre que o Método de Kutta é O⁢(h3). Sua iteração é definida por

y(0)=y0, (4.197)
y(k+1)=y(k)+h6⁢(ϕ1+4⁢ϕ2+ϕ3), (4.198)

com k=0,1,2,…,n, onde

ϕ1=f⁢(t,y) (4.199)
ϕ2=f⁢(t+h/2,y+h⁢ϕ1/2) (4.200)
ϕ3=f⁢(t+h,y−h⁢ϕ1+2⁢h⁢ϕ2). (4.201)

Aplique-o para o PVI dado no Exercício (4.144)-(4.145) e verifique se o erro global satisfaz a ordem esperada.

E. 4.3.5.

Considere o seguinte PVI

y′=y2−t⁢y,1<t≤2, (4.202)
y⁢(1)=−2. (4.203)

Use os seguintes métodos de Runge-Kutta com passo h=0.1 para computar o valor aproximado de y⁢(2):

  1. a)

    Método do Ponto Médio.

  2. b)

    Método de Euler Modificado.

  3. c)

    Método de Runge-Kutta de Quarta Ordem.


Dica: y⁢(2)=−2.10171⁢e−1.

E. 4.3.6.

Considere o seguinte PVI

y′−t2⁢y=0,1<t≤3, (4.204)
y⁢(1)=12. (4.205)

Use os seguintes métodos de Runge-Kutta com passo h=10−2 para computar o valor aproximado de y⁢(3):

  1. a)

    Método do Ponto Médio.

  2. b)

    Método de Euler Modificado.

  3. c)

    Método de Runge-Kutta de Quarta Ordem.


Dica: y⁢(3)=2.90306⁢e+3.


Envie seu comentário

Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!

Opcional. Preencha seu nome para que eu possa lhe contatar.
Opcional. Preencha seu e-mail para que eu possa lhe contatar.
As informações preenchidas são enviadas por e-mail para o desenvolvedor do site e tratadas de forma privada. Consulte a política de uso de dados para mais informações.

Licença Creative Commons
Este texto é disponibilizado nos termos da Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional. Ícones e elementos gráficos podem estar sujeitos a condições adicionais.

Pedro H A Konzen
| | | |