Mudanças entre as edições de "Método de Euler"

De Física Computacional
Ir para: navegação, pesquisa
(Criou página com '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 esb...')
 
Linha 1: Linha 1:
 +
= 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.
 
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.
  
Linha 5: Linha 6:
 
<math display="block">\frac{dy}{dt}=f\left(t,y\right)\qquad y\left(t_{0}\right)=y_{0}</math>
 
<math display="block">\frac{dy}{dt}=f\left(t,y\right)\qquad y\left(t_{0}\right)=y_{0}</math>
  
Onde conhecemos a função <math display="inline">f\left(t,y\right)</math> e os valores na condição inicial também são números conhecidos, e assumimos que é tudo contínuo de forma que sabemos que uma solução de fato vai existir. Temos então para <math display="inline">t=t_{0}</math>:
+
Considerando que conhecemos a função <math display="inline">f\left(t,y\right)</math> 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 <math display="inline">t=t_{0}</math>:
  
 
<math display="block">\left.\frac{dy}{dt}\right|_{t=t_{0}}=f\left(t_{0},y_{0}\right)</math>
 
<math display="block">\left.\frac{dy}{dt}\right|_{t=t_{0}}=f\left(t_{0},y_{0}\right)</math>
  
Dessa forma podemos escrever então uma reta tangente à curva <math display="inline">y\left(t\right)</math> no ponto <math display="inline">\left(t_{0},y_{0}\right)</math> usando a inclinação <math display="inline">f\left(t_{0},y_{0}\right)</math>:
+
Dessa forma podemos escrever uma reta tangente à curva <math display="inline">y\left(t\right)</math> no ponto <math display="inline">\left(t_{0},y_{0}\right)</math> usando a inclinação <math display="inline">f\left(t_{0},y_{0}\right)</math>:
  
 
<math display="block">y=y_{0}+f\left(t_{0},y_{0}\right)\left(t-t_{0}\right)</math>
 
<math display="block">y=y_{0}+f\left(t_{0},y_{0}\right)\left(t-t_{0}\right)</math>
  
Para visualizar melhor esta equação, podemos fazer <math display="inline">t_{0}=0</math> temos <math display="inline">y=y_{0}+f\left(t_{0},y_{0}\right)t</math> e fica ainda mais evidente que esta é uma equação de reta com inclinação <math display="inline">f\left(t_{0},y_{0}\right)</math>, e quando <math display="inline">t=t_{0}</math> temos <math display="inline">y=y_{0}</math>, ou seja, passa pelo ponto <math display="inline">\left(t_{0},y_{0}\right)</math>. Para <math display="inline">t_{0}\neq0</math> temos apenas um deslocamento no eixo.
+
Para visualizar melhor esta equação, podemos fazer <math display="inline">t_{0}=0</math>, ficmos então com <math display="inline">y=y_{0}+f\left(t_{0},y_{0}\right)t</math>. Desta forma, fica ainda mais evidente que esta é uma equação de reta com inclinação <math display="inline">f\left(t_{0},y_{0}\right)</math>, e quando <math display="inline">t=t_{0}</math> temos <math display="inline">y=y_{0}</math>, ou seja, uma reta que passa pelo ponto <math display="inline">\left(t_{0},y_{0}\right)</math>. Para <math display="inline">t_{0}\neq0</math> temos apenas um deslocamento no eixo.
  
 
Então se <math display="inline">t_{1}</math> é perto o suficiente de <math display="inline">t_{0}</math>, a equação da reta vai estar perto do valor atual da solução em <math display="inline">t_{1}</math>. Então podemos escrever:
 
Então se <math display="inline">t_{1}</math> é perto o suficiente de <math display="inline">t_{0}</math>, a equação da reta vai estar perto do valor atual da solução em <math display="inline">t_{1}</math>. Então podemos escrever:
Linha 27: Linha 28:
 
<math display="block">y_{n+1}=y_{n}+f\left(t_{n},y_{n}\right)\left(t_{n+1}-t_{n}\right)</math>
 
<math display="block">y_{n+1}=y_{n}+f\left(t_{n},y_{n}\right)\left(t_{n+1}-t_{n}\right)</math>
  
Podemos ainda reescrever o passo como <math display="inline">t_{n+1}-t_{n}=\Delta t</math>, e ficamos então com:
+
Podemos ainda reescrever o passo como <math display="inline">t_{n+1}-t_{n}=\Delta t</math>, de forma que ficamos com:
  
 
<math display="block">y_{n+1}=y_{n}+f\left(t_{n},y_{n}\right)\Delta t</math>
 
<math display="block">y_{n+1}=y_{n}+f\left(t_{n},y_{n}\right)\Delta t</math>
  
Outra forma de visualizar o resultado, é considerar a reta
+
Outra forma de visualizar o resultado, é considerar a reta:
  
 
<math display="block">y=y_{n}+f\left(t_{n},y_{n}\right)\left(t-t_{n}\right)</math>
 
<math display="block">y=y_{n}+f\left(t_{n},y_{n}\right)\left(t-t_{n}\right)</math>
  
Como a solução aproximada para o intervalo <math display="inline">\left[t_{n},t_{n+1}\right]</math>, então com um conjunto de retas podemos ter uma aproximação para a solução como um todo.
+
Como a solução aproximada para o intervalo <math display="inline">\left[t_{n},t_{n+1}\right]</math>. Então com um conjunto de retas podemos ter uma aproximação para a solução como um todo.
  
 
<span id="exemplo-1"></span>
 
<span id="exemplo-1"></span>
= Exemplo 1 =
+
== Exemplo ==
  
 
O primeiro exemplo de aplicação é o '''decaimento radiativo''', cuja equação diferencial é: <math display="block">\frac{dN}{dt}=-\lambda N</math>
 
O primeiro exemplo de aplicação é o '''decaimento radiativo''', cuja equação diferencial é: <math display="block">\frac{dN}{dt}=-\lambda N</math>
Linha 64: Linha 65:
 
N =[10**6];Np=100;lam=0.1;dt=0.1  #Parâmetros
 
N =[10**6];Np=100;lam=0.1;dt=0.1  #Parâmetros
  
fac = 1-lam*dt     #Função calculada
+
fac = 1-lam*dt                   #Função calculada
for i in range(Np): #Vamo calcular Np passos
+
for i in range(Np):               #Vamo calcular Np passos
   N.append(fac*N[i])#Salvamos o novo valor
+
   N.append(fac*N[i])             #Salvamos o novo valor
   print(i*dt,N[i]) #printamos o resultado
+
   print(i*dt,N[i])               #printamos o resultado
  
plt.plot(N)         #Construimos o gráfico
+
plt.plot(N)                       #Construimos o gráfico
plt.show()         #Plotamos
+
plt.show()                       #Plotamos
 
</pre>
 
</pre>
  

Edição das 13h56min de 26 de janeiro de 2022

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:

Considerando que conhecemos a função 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 :

Dessa forma podemos escrever uma reta tangente à curva no ponto usando a inclinação :

Para visualizar melhor esta equação, podemos fazer , ficmos então com . Desta forma, fica ainda mais evidente que esta é uma equação de reta com inclinação , e quando temos , ou seja, uma reta que passa pelo ponto . Para temos apenas um deslocamento no eixo.

Então se é perto o suficiente de , a equação da reta vai estar perto do valor atual da solução em . Então podemos escrever:

Podemos repetir o processo, usando agora como valor inicial, então:

Ou de maneira genérica:

Podemos ainda reescrever o passo como , de forma que ficamos com:

Outra forma de visualizar o resultado, é considerar a reta:

Como a solução aproximada para o intervalo . 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 é:

Onde é a quantidade de partículas que sofrem o decaimento e a taxa no qual o decaimento ocorre.

  • Notem que a mesma equação pode descrever a diminuição de uma população estéril ( sendo a quantidade de indivíduos vivos e 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

Ou mais explicitamente:

Implementando:

import matplotlib.pyplot as plt   #Biblioteca para plotar gráficos
N =[10**6];Np=100;lam=0.1;dt=0.1  #Parâmetros

fac = 1-lam*dt                    #Função calculada
for i in range(Np):               #Vamo calcular Np passos
  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

Principais materiais utilizados

  1. Euler's Method (Paul Dawkins, Universidade Lamar)
  2. Método de Euler (REAMAT, UFRGS)