Baixe o app para aproveitar ainda mais
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
Compartilhar