Buscar

Método de Euler

Prévia do material em texto

272 Cálculo Numérico
Exemplo 10.2.1. Considere o problema de valor inicial
u′(t) = 2u(t)
u(0) = 1
(10.23)
cuja solução é u(t) = e2t. O método de Euler aplicado a este problema produz
o esquema:
u(k+1) = u(k) + 2hu(k) = (1 + 2h)u(k)
u(1) = 1,
(10.24)
Suponha que queremos calcular o valor aproximado de u(1) com h = 0,2. Então
os pontos t(1) = 0, t(2) = 0,2, t(3) = 0,4, t(4) = 0,6, t(5) = 0,8 e t(6) = 1,0 formam
os seis pontos da malha. As aproximações para a solução nos pontos da malha
usando o método de Euler são:
u(0) ≈ u(1) = 1
u(0,2) ≈ u(2) = (1 + 2h)u(1) = 1,4u(1) = 1,4
u(0,4) ≈ u(3) = 1,4u(2) = 1,96
u(0,6) ≈ u(4) = 1,4u(3) = 2,744
u(0,8) ≈ u(5) = 1,4u(4) = 3,8416
u(1,0) ≈ u(6) = 1,4u(5) = 5,37824
(10.25)
Essa aproximação é bem grosseira quando comparamos com a solução do problema
em t = 1: u(1) = e2 ≈ 7,38906. Não obstante, se tivéssemos escolhido um passo
menor, teríamos obtido uma aproximação melhor. Veja tabela abaixo com valores
obtidos com diferentes valores de passo h.
h 10−1 10−2 10−3 10−4 10−5 10−6 10−7
u(N) 6,1917 6,7275 7,0400 7,2096 7,2980 7,3432 7,3660
De fato, podemos mostrar que quando h se aproxima de 0, a solução apro-
ximada via método de Euler converge para a solução exata e2. Para isto, basta
observar que a solução da relação de recorrência (10.24) é dada por
u(k) = (1 + 2h)k−1. (10.26)
Como t(k) = (k − 1)h e queremos a solução em t = 2, a solução aproximada pelo
método de Euler com passo h em é dada por:
u(k) = (1 + 2h)k−1 = (1 + 2h) 2
h . (10.27)
Aplicando o limite h→ 0+, temos:
lim
h→0+
(1 + 2h) 2
h = e2. (10.28)
Licença CC-BY-SA-3.0. Contato: reamat@ufrgs.br
https://creativecommons.org/licenses/by-sa/3.0/
reamat@ufrgs.br
10.2. MÉTODO DE EULER 273
Em Python, podemos computar a solução numérica deste problema de valor
inicial via o método de Euler com o seguite código:
#define f(t,u)
def f(t,u):
return 2*u
#tamanho e num. de passos
h = 0.2
N = 6
#cria vetor t e u
t = np.empty(N)
u = np.copy(t)
#C.I.
t[0] = 0
u[0] = 1
#iteracoes
for i in np.arange(N-1):
t[i+1] = t[i] + h
u[i+1] = u[i] + h*f(t[i],u[i])
#imprime
for i,tt in enumerate(t):
print("%1.1f %1.4f" % (t[i],u[i]))
Vamos agora, analisar o desempenho do método de Euler usando um exemplo
mais complicado, porém ainda simples suficiente para que possamos obter a solução
exata:
Exemplo 10.2.2. Considere o problema de valor inicial relacionado à equação
logística:
u′(t) = u(t)(1− u(t))
u(0) = 1/2
(10.29)
Podemos obter a solução exata desta equação usando o método de separação
de variáveis e o método das frações parciais. Para tal escrevemos:
du(t)
u(t)(1− u(t)) = dt (10.30)
Licença CC-BY-SA-3.0. Contato: reamat@ufrgs.br
https://creativecommons.org/licenses/by-sa/3.0/
reamat@ufrgs.br

Continue navegando

Outros materiais