| | | | |

4.3 Métodos de Runge-Kutta

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

Seja um Problema de Valor Inicial (PVI) da forma

y=f(t,y),t0<ttf, (4.112a)
y(t0)=y0, (4.112b)

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+kh, k=0,1,2,,n, h=(tft0)/n.

Os métodos de Runge1313endnote: 13Carl David Tolmé Runge, 1856 - 1927, matemático alemão. Fonte: Wikipédia: Carl Runge.-Kutta1414endnote: 14Martin 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)+hi=1sciϕi(t(k),y(k)):=Φ(t(k),y(k)), (4.113)

onde

ϕ1 :=f(t(k),y(k)), (4.114a)
ϕ2 :=f(t(k)+α2h,y(k)+hβ2,1ϕ1), (4.114b)
ϕ3 :=f(t(k)+α3h,y(k)+h(β3,1ϕ1+β3,2ϕ2)), (4.114c)
ϕs :=f(t(i)+αsh,y(i)+hj=1s1βs,jϕj), (4.114d)

com os coeficientes ci,αi, i=1,2,,s e βi,j, j=1,2,,s1, 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.115)

com

ϕ1(t(k),y(k)) :=f(t(k),y(k)), (4.116a)
ϕ2(t(k),y(k)) :=f(t(k)+α2h,y(k)+hβ2,1f(t(k),y(k))). (4.116b)

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

τ(t,y;h):=Δ(t,y;h)Φ(t,y;h), (4.117)

e por polinômio de Taylor de y(t)1515endnote: 15Consulte (4.83) para mais detalhes sobre a expansão em polinômio de Taylor de Δ(t,y;h).

Δ(t,y;h) =f(t,y(t))+h2ddtf(t,y)+O(h2) (4.118)
=f(t,y(t))+h2[ft(t,y)
+fy(t,y)f(t,y)]+O(h2). (4.119)

De (4.115), temos

Φ(t,y;h)=c1f(t,y)+c2f(t+α2h,y+hβ2,1f(t,y)) (4.120)

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) (4.121)
+β2,1fy(t,y)f(t,y))+O(h2).

Então, por comparação de (4.119) e (4.121), temos

c1 +c2=1 (4.122)
c2 α2=12 (4.123)
c2 β21=12. (4.124)

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.125)
c2=1,
α2=12,
β2,1=12.

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

y(0)=y0 (4.126)
y(k+1)=y(k)+hf(t(k)+h2,y(k)+h2f(t(k),y(k))),

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

Exemplo 4.3.1.

Consideramos o seguinte PVI

yy=sen(t),0<t1, (4.127a)
y(0)=12. (4.127b)

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)|
101 2.02175 5.6e03
102 2.02733 6.0e05
103 2.02739 6.1e07
104 2.02740 6.1e09
105 2.02740 6.1e11
106 2.02740 1.9e12
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.128)
c2=12,
α2=1,
β21=1.

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

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

Consideremos o seguinte problema de valor inicial

yy=sen(t),t>0 (4.130a)
y(0)=12. (4.130b)

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)|
101 2.02096 6.4e03
102 2.02733 6.9e05
103 2.02739 6.9e07
104 2.02740 6.9e09
105 2.02740 6.9e11
106 2.02740 2.0e12
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.131)
y(k+1)=y(k)+h6(ϕ1+2ϕ2+2ϕ3+ϕ4),

com

ϕ1 :=f(t(k),y(k)), (4.132a)
ϕ2 :=f(t(k)+h/2,y(k)+hϕ1/2), (4.132b)
ϕ3 :=f(t(k)+h/2,y(k)+hϕ2/2), (4.132c)
ϕ4 :=f(t(k)+h,y(k)+hϕ3), (4.132d)
Exemplo 4.3.3.

Consideremos o seguinte PVI

yy=sen(t),t>0 (4.133a)
y(0)=12. (4.133b)

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)|
101 2.02739 2.8e06
102 2.02740 3.1e10
103 2.02740 3.0e14
104 2.02740 4.4e14
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+ey2+1=2,1<t2, (4.134)
y(1)=1. (4.135)

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.

Resposta.

a) 6.00654e1; b) 6.00703e1; c) 5.99608e1

E. 4.3.2.

(4.2.1) Considere o seguinte problema de valor inicial

y+cos(t)=y,0<t1, (4.136a)
y(0)=12. (4.136b)

A solução analítica é y(t)=12cos(t)12sin(t). Faça testes numéricos com h=101, 102, 103 e 104, 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.2.1). Para cada um, faça um esboço do gráfico do erro e(t;h=101)=|y~(t)y(t)| e verifique se ele tem a forma esperada conforme a estimativa do erro global (4.91).

Resposta.

Dica: o gráfico de e(t;h=101) 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.137)
y(k+1)=y(k)+h6(ϕ1+4ϕ2+ϕ3),

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

ϕ1 =f(t,y) (4.138)
ϕ2 =f(t+h/2,y+hϕ1/2)
ϕ3 =f(t+h,yhϕ1+2hϕ2).

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

E. 4.3.5.

Considere o seguinte PVI

y=y2ty,1<t2, (4.139a)
y(1)=2. (4.139b)

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.

Resposta.

Dica: y(2)=2.10171e1.

E. 4.3.6.

Considere o seguinte PVI

yt2y=0,1<t3, (4.140a)
y(1)=12. (4.140b)

Use os seguintes métodos de Runge-Kutta com passo h=102 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.

Resposta.

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


Envie seu comentário

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. Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!