Método de Euler
Euler explícito
A grande maioria das equações diferenciais de primeira ordem não podem ser resolvidas analiticamente. Para o comportamento a longo prazo de uma solução podemos tentar esboçar um campo de direções, mas se precisamos conhecer mais especificamente como uma solução se comporta, precisamos de outra ferramenta. Os métodos numéricos nos permitem obter soluções aproximadas para as equações diferenciais.
Começando com uma problema genérico de valor inicial:
Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle \frac{dy}{dt}=f\left(t,y\right)\qquad y\left(t_{0}\right)=y_{0}}
Considerando que conhecemos a função Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\textstyle f\left(t,y\right)} e os valores na condição inicial, assumimos que é tudo contínuo de forma que sabemos que uma solução de fato vai existir. Temos então para Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\textstyle t=t_{0}} :
Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle \left.\frac{dy}{dt}\right|_{t=t_{0}}=f\left(t_{0},y_{0}\right)}
Dessa forma podemos escrever uma reta tangente à curva Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\textstyle y\left(t\right)} no ponto Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\textstyle \left(t_{0},y_{0}\right)} usando a inclinação Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\textstyle f\left(t_{0},y_{0}\right)} :
Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle y=y_{0}+f\left(t_{0},y_{0}\right)\left(t-t_{0}\right)}
Para visualizar melhor esta equação, podemos fazer Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\textstyle t_{0}=0} , ficmos então com Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\textstyle y=y_{0}+f\left(t_{0},y_{0}\right)t} . Desta forma, fica ainda mais evidente que esta é uma equação de reta com inclinação Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\textstyle f\left(t_{0},y_{0}\right)} , e quando Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\textstyle t=t_{0}} temos Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\textstyle y=y_{0}} , ou seja, uma reta que passa pelo ponto Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\textstyle \left(t_{0},y_{0}\right)} . Para Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\textstyle t_{0}\neq0} temos apenas um deslocamento no eixo.
Então se Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\textstyle t_{1}} é perto o suficiente de Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\textstyle t_{0}} , a equação da reta vai estar perto do valor atual da solução em Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\textstyle t_{1}} . Então podemos escrever:
Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle y_{1}=y_{0}+f\left(t_{0},y_{0}\right)\left(t_{1}-t_{0}\right)}
Podemos repetir o processo, usando agora Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\textstyle y_{1}=y\left(t_{1}\right)} como valor inicial, então:
Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle y_{2}=y_{1}+f\left(t_{1},y_{1}\right)\left(t_{2}-t_{1}\right)}
Ou de maneira genérica:
Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle y_{n+1}=y_{n}+f\left(t_{n},y_{n}\right)\left(t_{n+1}-t_{n}\right)}
Podemos ainda reescrever o passo como Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\textstyle t_{n+1}-t_{n}=\Delta t} , de forma que ficamos com:
Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle y_{n+1}=y_{n}+f\left(t_{n},y_{n}\right)\Delta t}
Outra forma de visualizar o resultado, é considerar a reta:
Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle y=y_{n}+f\left(t_{n},y_{n}\right)\left(t-t_{n}\right)}
Como a solução aproximada para o intervalo Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\textstyle \left[t_{n},t_{n+1}\right]} . Então com um conjunto de retas podemos ter uma aproximação para a solução como um todo.
Exemplo
O primeiro exemplo de aplicação é o decaimento radiativo, cuja equação diferencial é: Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle \frac{dN}{dt}=-\lambda N}
Onde Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\textstyle N} é a quantidade de partículas que sofrem o decaimento e Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\textstyle \lambda} a taxa no qual o decaimento ocorre.
- Notem que a mesma equação pode descrever a diminuição de uma população estéril (Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\textstyle N} sendo a quantidade de indivíduos vivos e Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\textstyle \lambda} a taxa de mortalidade) ou a descarga de um circuito RC.
- A aplicação do método a este exemplo de primeira ordem nos leva a seguinte relação de recorrência
Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle \begin{align} N_{n+1} & =N_{n}+f\left(t_{n},N_{n}\right)\Delta t\\ N_{n+1} & =N_{n}-\lambda N_{n}\Delta t\\ N_{n+1} & =N_{n}\left(1-\lambda\Delta t\right)\end{align} }
Ou mais explicitamente:
Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle \begin{align} N\left(t_{n+1}\right) & =\left[1-\lambda\Delta t\right]N\left(t_{n}\right)\\ N\left(t_{n}+\Delta t\right) & =\left[1-\lambda\Delta t\right]N\left(t_{n}\right)\end{align}}
Implementando:
import matplotlib.pyplot as plt #Biblioteca para plotar gráficos import numpy as np #Biblioteca com funções matemáticas N =[10**6];nt=6;lam=0.1;dt=0.1 #Parâmetros tau=np.log(2)/lam #Tempo final em que vamos obter o erro fac = 1-lam*dt #Função calculada for i in range(int(nt*tau/dt)+1): #Vamo calcular um múltiplo da meia vida N.append(fac*N[i]) #Salvamos o novo valor print(i*dt,N[i]) #printamos o resultado plt.plot(N) #Construimos o gráfico plt.show() #Plotamos
Euler implícito
A equação da reta obtida no euler explícito pode ser obtida a partir da definição da derivada:
Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle \frac{dy}{dt}=f\left(t,y\right)\approx\frac{y\left(t+\Delta t\right)-y\left(t\right)}{\Delta t}\longrightarrow y\left(t+\Delta t\right)\approx y\left(t\right)+f\left(t,y\right)\Delta t}
Mas também podemos escrever a derivada como:
Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle \frac{dy}{dt}=f\left(t,y\right)\approx\frac{y\left(t\right)-y\left(t-\Delta t\right)}{\Delta t}\longrightarrow y\left(t\right)\approx y\left(t-\Delta t\right)+f\left(t,y\right)\Delta t}
Mantendo a notação:
Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle y_{n+1}=y_{n}+f\left(t_{n+1},y_{n+1}\right)\Delta t}
O termo Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\textstyle f\left(t_{n+1},y_{n+1}\right)} não é conhecido, por isso temos uma equação implícita para Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\textstyle y_{n+1}} . Métodos implícitos podem ser usados quando temos restrições muito rigorosas no método explícito devido a condições de estabilidade.
Exemplo
Trabalhando novamente com o decaimento radioativo:
Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle \frac{dN}{dt}=-\lambda N}
Vamo ter então:
Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle \begin{align} N_{n+1} & =N_{n}+f\left(t_{n+1},N_{n+1}\right)\Delta t\\ N_{n+1} & =N_{n}-\lambda N_{n+1}\Delta t\\ N_{n+1}\left(1+\lambda\Delta t\right) & =N_{n}\\ N_{n+1} & =\frac{N_{n}}{1+\lambda\Delta t}\end{align}}
Ou mais explicitamente:
Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle \begin{align} N\left(t_{n}+\Delta t\right) & =\frac{N\left(t\right)}{1+\lambda\Delta t}\end{align}}
Uma comparação entre os dois métodos de Euler para o caso do decaimento é simples. Lembando da fórmula recursiva de ambos os casos:
Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle N\left(t_{n}+\Delta t\right)=N\left(t\right)\left[1-\lambda\Delta t\right]\qquad e \qquad N\left(t_{n}+\Delta t\right)=N\left(t\right)\left[\frac{1}{1+\lambda\Delta t}\right]}
E fazendo uma expansão em série de Taylor em torno de Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\textstyle 0} , escrevendo Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\textstyle x=\lambda\Delta t} , temos:
Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle \frac{1}{1+x}=\sum_{n=0}^{\infty}\frac{f^{\left(n\right)}\left(a\right)\left(x-a\right)^{n}}{n!}=\left(1-x\right)+\sum_{n=2}^{\infty}\frac{f^{\left(n\right)}\left(a\right)\left(x-a\right)^{n}}{n!}}
Então os termos são iguais até a primeira ordem, sendo assim uma boa aproximação.
Implementando o método de euler implícito, temos:
import matplotlib.pyplot as plt #Biblioteca para plotar gráficos import numpy as np #Biblioteca com funções matemáticas N =[10**6];nt=6;lam=0.1;dt=0.1 #Parâmetros tau=np.log(2)/lam #Meia-vida fac = 1+lam*dt #Função calculada for i in range(int(nt*tau/dt)+1): #Vamo calcular um múltiplo da meia vida N.append(N[i]/fac) #Salvamos o novo valor print(i*dt,N[i]) #printamos o resultado plt.plot(N) #Construimos o gráfico plt.show() #Plotamos
Avaliação de erro
Erros computados
Erro 1: curva numérica vs exata
import numpy as np #Biblioteca com recursos matemáticos import matplotlib.pyplot as plt #Biblioteca para plotar gráficos N0=10**6;nt=6;lam=0.001;dt=100 #Parâmetros exp = 1-lam*dt #Função calculada para o método explícito imp = 1+lam*dt #Função calculada para o método implícito NE = [N0] #Lista de valore para o método explícito NI = [N0] #Lista de valore para o método implícito T = [0] #Lista de tempos no qual vamos calcular N tau=np.log(2)/lam #Tempo final em que vamos obter o erro #Solução numérica for i in range(int(nt*tau/dt)+1): #Vamo calcular um múltiplo da meia vida NE.append(exp*NE[i]) #Explícito NI.append(NI[i]/imp) #Implícito T.append((i+1)*dt) #Tempo #Solução analítica t = np.arange(0.0,nt*tau, 1) #Tempo NA =N0*np.exp(-lam*t) #Solução #Construimos o gráfico plt.plot(T,NE,color='blue', label='Explícito') #Solução explícita plt.plot(T,NI,color='orange', label='Implícito') #Solução implícita plt.plot(t,NA,color='green', label='Sol. Exata') #Solução exata plt.title('Decaimento radioativo para λ = '+str(lam)+' e dt = '+str(dt)) #Título plt.legend() #Legenda das curvas plt.xlabel('Tempo [s]');plt.ylabel('Número de Núcleos [N]') #Legenda dos eixos plt.ticklabel_format(style='plain') #Desativar a notação científica plt.show() #Exibir o resultado
Erro 2: Curva de erro pra diferentes dt
import numpy as np #Biblioteca com recursos matemáticos import matplotlib.pyplot as plt #Biblioteca para plotar gráficos N0 =10**6;lam=0.001;nt=6 #Parâmetros dt1=100;dt2=200;dt3=50 def sol_metodo(dt,N0,lam,nt): """Função para calcular a solução de acordo com o método de Euler e retornar o erro comparado a solução analítica e o tempo equivalente""" #dt - Intervalo do passo #N0 - Número inicial de Núcleos #lam - Lambda #nt - Quantidade de meia vidas que vamos caclular N=[N0] #Solução D=[0] #Erro T=[0] #Tempo frac = (1-lam*dt) #Funçao calculada tau=np.log(2)/lam #Meia-vida for i in range(1,int(nt*tau/dt)+1): #Vamo calcular um múltiplo da meia vida N.append(frac*N[i-1]) #Solução numérica T.append(i*dt) #Tempo no qual achamos a solução err=abs(N[i]-N0*np.exp(-lam*T[i])) #Erro D.append(err) #Guardamos o erro return(D,T) #Retorno o erro (D1,T1) = sol_metodo(dt1,N0,lam,nt) #Solução para dt1 (D2,T2) = sol_metodo(dt2,N0,lam,nt) #Solução para dt2 (D3,T3) = sol_metodo(dt3,N0,lam,nt) #Solução para dt3 #Construimos o gráfico plt.plot(T1,D1,color='blue', label='dt = '+str(dt1)+' s') #Solução para dt1 plt.plot(T2,D2,color='orange', label='dt = '+str(dt2)+' s') #Solução para dt2 plt.plot(T3,D3,color='green', label='dt = '+str(dt3)+' s') #Solução para dt3 plt.title('Comparação dos erros para dierentes dt (Euler explícito)') #Título plt.legend() #Legenda das curvas plt.xlabel('Tempo [s]');plt.ylabel('Erro[abs(N-Nmétodo)]') #Legenda dos eixos plt.ticklabel_format(style='plain') #Desativar a notação científica plt.show()
Erro 3: Erro em relação a dt com um t fixo
import numpy as np #Biblioteca com recursos matemáticos import matplotlib.pyplot as plt #Biblioteca para plotar gráficos N0 =10**6;lam=0.001 #Parâmetros dt=[1/10**(i) for i in np.arange(2.9,-0.1,-0.3)] tfin=[(1,'ob','-k'),(4,'sr','-m')] #Tuplas com os tempos finais e os marcadores principais e do fit y="log";x="log" #Se os eixos vão ser "linear" ou "log" def sol_metodo(dtT,N0,lam,t): """Função para calcular a solução de acordo com o método de Euler e retornar o erro comparado a solução analítica""" #dtT - Intervalo do passo em unidade de tau #N0 - Número inicial de Núcleos #lam - Lambda #t - Tempo em que vamos pegar a solução, múltiplo da meia-vida N=N0 T=np.log(2)/lam #Tempo final em que vamos obter o erro dt=dtT*T #Intervalo de tempo em segundos frac = (1-lam*dt) #Funçao calculada for i in range(1,int(t*T/dt)+1): #Vamo calcular os passos necessários para 4000s N=frac*N #Solução numérica err =abs(N-N0*np.exp(-lam*i*dt)) #Erro return(err) #Retorno o erro for t in tfin: #Percorremos todos os tempos finais E=[] #Lista para guardar todos os erros com for d in dt: E.append (sol_metodo(d,N0,lam,t[0])) #Computamos o erro para cada dt plt.plot(dt,E,t[1], label='t = '+str(t[0])+' τ') #Plot dos marcadores plt.plot(dt,E,'--'+t[1][1]) #Plot Tracejado m, b = np.polyfit(np.log(np.array(dt)),np.log(np.array(E)), 1) #Uma curva para fitar os logaritmos label='ln(erro) = {:.2f} + {:.2f} ln(Δt)'.format(b,m) plt.plot(dt, np.e**b*np.array(dt)**m,t[2],label=label) #Tiramos a exponencial do logaritmo #Configuramos o gráfico plt.title('Erro X dt') #Título plt.legend() #Legenda das curvas plt.xlabel('Δt [τ]') #Legenda dos eixos plt.ylabel('Erro[abs(N-Nmétodo)]') plt.ticklabel_format(style='plain') #Desativar a notação científica plt.xscale(x);plt.yscale(y) #Escala plt.show() #Exibir o resultado
Erro teórico
Outro caminho que podemos tomar para obtermos o método de Euler, é através da expansão em série de Taylor de uma função Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\textstyle y\left(t+\Delta t\right)} em torno do ponto Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\textstyle y\left(t\right)} . Lembrando que a expansão em série de Taylor de uma função Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\textstyle f\left(x\right)} em torno de Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\textstyle a} é dada por:
Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle f\left(x\right)=\sum_{n=0}^{\infty}\frac{f^{\left(n\right)}}{n!}\left(a\right)\left(x-a\right)^{n}}
Então fazendo esta expansão e escrevendo
Podemos olhar com mais atenção uma vez que tecnicamente nosssa variável da função que estamos expandindo é .
Considerando que é constante, então: , e sendo o ponto , temos:
De forma que ficamos então apenas com:
Os primeiros dois termos então correspondem ao método de Taylor, e o somatório se torna o erro ao jogarmos fora. O menor grau que desprezamos é , então o erro local é . E como o número de passos é dado por então após passos temos uma estimativa de erro global dada por ou apenas . Cálculos mais detalhados da estimativa do erro podem ser encontrados em textos matemáticos[1].
Citações
- ↑ Euler's Method (William F. Trench, LibreTexts)
Principais materiais utilizados
- Forward and Backward Euler Methods (Michael Zeltkevic, Instituto de Tecnologia de Massachusetts)
- Euler's Method (Paul Dawkins, Universidade Lamar)
- Método de Euler (REAMAT, UFRGS)