Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Estabilidade Numérica para o Método de Euler

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 {zn}\{z_n\} tal que

zn+1=zn+hf(tn,zn),n=0,1,,N(h)1,z0=y0+ϵ.z_{n+1} = z_n + h f(t_n,z_n), \quad n = 0,1,\ldots,N(h)-1, \qquad z_0 = y_0 + \epsilon.

De modo análogo ao que sabemos para o PVI, usamos uma condição inicial perturbada para verificar que {zn}\{z_n\} comporta-se como uma segunda solução {yn}\{ y_n \} à medida que h0h \to 0.

Tomemos o erro en=znyn,n0e_n = z_n - y_n, \quad n \geq 0. Então, e0=ϵe_0 = \epsilon. Subtraindo yn+1=yn+hf(tn,yn)y_{n+1} = y_n + h f(t_n,y_n) da anterior, obtemos

en+1=en+h[f(tn,zn)f(tn,yn).e_{n+1} = e_n + h [ f(t_n,z_n) - f(t_n,y_n).

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):

max0nN(h)znyne(bt0)Kϵκϵ,\max_{0 \leq n \leq N(h)} |z_n - y_n| \leq e^{(b-t_0)K}|\epsilon| \leq \kappa |\epsilon|,

para uma constante κ0\kappa \geq 0. Vale relembrar que KK é 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

{y(t)=100y(t)y(0)=y0\begin{cases} y'(t) = -100y(t)\\ y(0) = y_0 \end{cases}

cuja solução analítica é y(t)=y0e100ty(t) = y_0e^{-100t}. Se y0>0y_0 > 0, a solução é positiva e decai rapidamente com tt \to \infty. Se o método de Euler explícito for aplicado a este PVI, teremos

wn+1=(1100h)wn.w_{n+1} = (1 - 100h)w_n.

Com um passo h=0.1h = 0.1, a aproximação numérica wn+1=9wnw_{n+1} = -9w_n cresce de acordo com wn=(9)nw0w_n = (-9)^n w_0 e oscilla com uma amplitude crescente sem, de fato, aproximar a solução verdadeira. Ao se reduzir o passo para h=0.001h = 0.001, a solução numérica transforma-se para wn+1=0.9wnw_{n+1} = 0.9w_n, de modo que wn=0.9nw0w_n = 0.9^n w_0 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$')

<Figure size 432x288 with 2 Axes>

Exercício: Repita o mesmo experimento numérico anterior para o PVI

{y(t)=λ(ysen(t))+cos(t)y(π/4)=1/2\begin{cases} y'(t) = \lambda(y - \textrm{sen}(t)) + \cos(t) \\ y(\pi/4) = 1/2 \end{cases}

para λ=2\lambda = 2 e λ=0.2\lambda = - 0.2. Compare as soluções numéricas obtidas pelo método de Euler para h=π/10h = \pi/10 e h=π/20h = \pi/20 para cada valor de λ\lambda.

Região de estabilidade

Considere o PVI mais geral

{y(t)=λy(t)y(0)=y0,\begin{cases} y'(t) = \lambda y(t)\\ y(0) = y_0 \end{cases},

em que λC\lambda \in \mathbb{C}. A EDO teste é estável, i.e. a taxa de crescimento da perturbação é limitada quando {λ}=α<0\Re\{\lambda\} = \alpha < 0. Neste, a solução numérica pelo método de Euler explícito corresponde ao processo

wn+1=(1+hλ)wnw_{n+1} = (1 + h\lambda)w_n

e a solução numérica será estável se, e somente se, o fator de amplificação for limitado por 1, ou seja,

1+hλ1.|1 + h\lambda| \leq 1.

Assim, diz-se que o método de Euler será estável para esta EDO teste para valores de hh que satisfizerem a condição acima (para λ\lambda real e negativo, h2/λh \leq -2/\lambda). O conjunto

S={hλC;1+hλ1}\mathcal{S} = \{ h \lambda \in \mathbb{C}; |1 + h\lambda| \leq 1 \}

é chamado de região de estabilidade para o método de Euler e trata-se de um disco de raio unitário centrado em (1,0)(-1,0) no plano de Argand-Gauss.