A seguir, aplicaremos um resultado derivado do contexto da estabilidade teórica do PVI ao método de Euler e estudar alguns aspectos de sua estabilidade numérica.
Definamos uma solução numérica tal que
De modo análogo ao que sabemos para o PVI, usamos uma condição inicial perturbada para verificar que comporta-se como uma segunda solução à medida que .
Tomemos o erro . Então, . Subtraindo da anterior, obtemos
Isto tem exatamente o mesmo formato que o erro total para o método de Euler considerando nulo o erro de truncamento. A partir do teorema do limite do erro, podemos concluir que (consultar demonstração):
para uma constante . Vale relembrar que é a constante de Lipschitz. Este resultado diz-nos que, ressalvadas as condições teóricas do PVI, a estabilidade numérica do método é encontrada.
Notas sobre análise de estabilidade¶
Consideremos o PVI
cuja solução analítica é . Se , a solução é positiva e decai rapidamente com . Se o método de Euler explícito for aplicado a este PVI, teremos
Com um passo , a aproximação numérica cresce de acordo com e oscilla com uma amplitude crescente sem, de fato, aproximar a solução verdadeira. Ao se reduzir o passo para , a solução numérica transforma-se para , de modo que significa um decaimento suave.
Reutilizemos nosso código do método de Euler para realizar este teste numérico.
from numpy import *
def euler_expl(t0,tf,y0,h,fun):
"""
Resolve o PVI y' = f(t,y), t0 <= t <= tf, y(t0) = y0
com passo h usando o metodo de Euler explicito.
Entrada:
t0 - tempo inicial
tf - tempo final
y0 - condicao inicial
h - passo
fun - funcao f(t,y) (anonima)
Saida:
t - nos da malha numerica
y - solucao aproximada
"""
n = round((tf - t0)/h + 1)
t = linspace(t0,t0+(n-1)*h,n)
y = linspace(t0,t0+(n-1)*h,n)
y = zeros((n,))
y[0] = y0
for i in range(1,n):
y[i] = y[i-1] + h*f(t[i-1],y[i-1])
return (t,y)import matplotlib.pyplot as plt
f = lambda t,y: -100*y
# h = 0.1
plt.subplot(121)
for y0 in [0.5,1,2,5]:
(t,ynum) = euler_expl(0,2,y0,0.1,f)
plt.plot(t,ynum)
plt.title('$h=0.1$')
# h = 0.001
plt.subplot(122)
for y0 in [0.5,1,2,5]:
(t,ynum) = euler_expl(0,2,y0,0.001,f)
plt.plot(t,ynum)
plt.title('$h=0.001$')

Exercício: Repita o mesmo experimento numérico anterior para o PVI
para e . Compare as soluções numéricas obtidas pelo método de Euler para e para cada valor de .
Região de estabilidade¶
Considere o PVI mais geral
em que . A EDO teste é estável, i.e. a taxa de crescimento da perturbação é limitada quando . Neste, a solução numérica pelo método de Euler explícito corresponde ao processo
e a solução numérica será estável se, e somente se, o fator de amplificação for limitado por 1, ou seja,
Assim, diz-se que o método de Euler será estável para esta EDO teste para valores de que satisfizerem a condição acima (para real e negativo, ). O conjunto
é chamado de região de estabilidade para o método de Euler e trata-se de um disco de raio unitário centrado em no plano de Argand-Gauss.