Use o botão abaixo para reportar erros ou dar sugestões.

Cálculo Numérico - Versão Python

10.4 Solução de sistemas de equações diferenciais


Nas seções 10.2 e 10.3, construimos dois métodos numéricos para resolver problemas de valor inicial. Nestas seções, sempre consideremos problemas envolvendo equações diferenciais ordinárias de primeira ordem, isto é: u(t) = f(t,u(t)),t > t(1) (10.65) u(t(1)) = a. (10.66)

Estas técnicas podem ser diretamente estendidas para resolver numericamente problemas de valor inicial envolvendo sistemas de equações diferenciais ordinárias de primeira ordem, isto é:

u1(t) = f 1(t,u1(t),u2(t),u3(t),,un(t)),t > t(1), u2(t) = f 2(t,u1(t),u2(t),u3(t),,un(t)),t > t(1), u3(t) = f 3(t,u1(t),u2(t),u3(t),,un(t)),t > t(1), un(t) = f(n)(t,u 1(t),u2(t),u3(t),,un(t)),t > t(1), u(t(1)) = a 1, u(t(2)) = a 2, u(t(3)) = a 3, u(t(n)) = a n. (10.67)

O Problema (10.67) pode ser escrito como um problema de primeira ordem envolvendo uma única incógnita, u(t), dada como um vetor de funções uj(t), isto é:

u(t) = u1(t) u2(t) u3(t) un(t) (10.68)

De forma que o Problema (10.67) assuma a seguinte forma: u(t) = f(t,u(t)),t > t(1) (10.69) u(t(1)) = a. (10.70)

onde

f(t,u(t)) = f1(t,u1(t),u2(t),u3(t),,un(t)) f2(t,u1(t),u2(t),u3(t),,un(t)) f3(t,u1(t),u2(t),u3(t),,un(t)) f(n)(t,u 1(t),u2(t),u3(t),,un(t)) (10.71)

e

a = a1 a2 a3 a n (10.72)

Veja o o Exemplo 10.73

Exemplo 10.4.1. Considere o problema de resolver numericamente pelo método de Euler o seguinte sistema de equações diferenciais ordinárias com valores iniciais:

x(t) = -y(t), (10.73a) y(t) = x(t), (10.73b) u(0) = 1. (10.73c) v(0) = 0. (10.73d)

Para aplicar o método de Euler a este sistema, devemos encarar as duas incógnitas do sistema como entradas de um vetor, ou seja, escrevemos:

u(t) = x(t) y(t) . (10.74)

e, portanto, o sistema pode ser escrito como: x(k+1) y(k+1) = x(k) y(k) + h - y(k) x(k) . (10.75)

Observe que este processo iterativo é equivalente a discretiza as equações do sistema uma-a-uma, isto é: x(k+1) = x(k) - hy(k), (10.76) y(k+1) = y(k) + hx(k), (10.77) x(1) = 1, (10.78) y(1) = 0, (10.79) (10.80)

Exercícios Resolvidos


ER 10.4.1. Resolva pelo método de Euler melhorado o seguinte problema de valor inicial para aproximar o valor de x e y entre t = 0 e t = 1: x(t) = x(t) - y(t), (10.81) y(t) = x(t) - y(t)3, (10.82) u(0) = 1. (10.83) v(0) = 0. (10.84)

Solução. Primeiramente, identificamos u(t) como o vetor incógnita:
u(t) = x(t) y(t) . (10.85)

Depois aplicamos a recursão do método de Euler melhorado dada por: ũ(k+1) = u(k) + hf(t(k),u(k)), (10.86) u(k+1) = u(k) + h 2 f(t(k),u(k)) + f(t(k),ũ(k)) , (10.87) (10.88)

isto é: x̃(k+1) = x(k) + h x(k) - y(k) (10.89) (k+1) = y(k) + h x(k) - y(k)3 (10.90) x(k+1) = x(k) + h 2 x(k) - y(k) + x̃(k) -(k) (10.91) y(k+1) = y(k) + h 2 x(k) - y(k)3 + x̃(k) - (k) 3 (10.92) (10.93)

A tabela a seguir resume os resultados obtidos:








h t = 0,2 t = 0,4 t = 0,6 t = 0,8 t = 1,0







10-2
x 1.1986240 1.3890564 1.5654561 1.7287187 1.8874532
y 0.2194288 0.4692676 0.7206154 0.9332802 1.0850012







10-3
x 1.1986201 1.3890485 1.5654455 1.7287066 1.8874392
y 0.2194293 0.4692707 0.7206252 0.9332999 1.0850259







10-4
x 1.1986201 1.3890484 1.5653609 1.7287065 1.8874390
y 0.2194293 0.4692707 0.7205062 0.9333001 1.0850262







A seguinte rotina pode ser usada para implementar a solução do sistema:

def euler_mod(h,Tmax,u1):  
   itmax = Tmax/h;  
x=np.empty(itmax+1)  
y=np.empty(itmax+1)  
x[0]=u1[0]  
y[0]=u1[1]  
 
for i in np.arange(0,itmax):  
t=i*h  
kx1 = (x[i]-y[i])  
ky1 = (x[i]-y[i]**3)  
 
x_til = x[i] + h*kx1  
y_til = y[i] + h*ky1  
 
kx2 = (x_til-y_til)  
ky2 = (x_til-y_til**3)  
 
x[i+1]=x[i]+h*(kx1+kx2)/2  
y[i+1]=y[i]+h*(ky1+ky2)/2  
 
return [x,y]  
 
 
Tmax=1  #tempo maximo de simulacao  
u1=np.asarray([1,0]) #condicoes iniciais na forma vetorial  
h=1e-4 #passo  
sol_euler=euler_mod(h,Tmax,u1);  
 
itmax=Tmax/h  
 
for t in [0, .2, .4, .6, .8, 1]:  
k=t/h  
print("h=%1.0e - x(%1.1f) =~ %1.6f - y(%1.1f) =~ %1.6f" % (h, t, sol_euler[0][k], t, sol_euler[1][k]) )  

Exercícios


Esta seção carece de exercícios. Clique em e inicie a editá-la agora mesmo. Veja outras formas de participar clicando aqui.

Creative Commons License Este texto é disponibilizado nos termos da licença Creative Commons Atribuição-CompartilhaIgual 3.0 Não Adaptada (CC-BY-SA 3.0). Página gerada em 15/5/2019 às 15:24:50.

Informe erros ou edite você mesmo!