import math # para usar expressões matemáticas
from matplotlib import pyplot as plt # para fazer gráficos
# Resolução do problema do cachorro e do coelho com o método de Euler
L=80 # Dados de inicilização.
n=10 # número de iterações do método de Euler.
h=L/n # passo para o método de Euler para resolver a equação u'=F(x,u), u=(r,y) que dependem de x.
t=[] # Vetor para guardar coordenadas discretas do tempo t, de h em h.
r=[] # Vetor para guardar coordenadas discretas da posição do coelho (rabbit), no tempo t.
y=[] # Vetor para guardar coordenadas discretas da posição do cachorro (dog), no eixo y. Esperamos y=f(x).
x=[] # Vetor para guardar coordenadas discretas da posição do cachorro (dog), no eixo x.
t.append(0)
y.append(0)
x.append(L)
r.append(0)
def F(s,u,v): # Equação (u',v')=F(x,u,v), s=x, u=r (rabit) e v=y (dog).
dydx=(v-u)/s
drdx=-math.sqrt(1+(dydx)**2)/2
return [drdx, dydx]
for i in range(1,n+1): # Método de Euler u_(n+1)=u_n+hF(s_n,u_n)
t.append(0)
Fp=F(x[i-1],r[i-1],y[i-1])
r.append(r[i-1]-h*Fp[0])
y.append(y[i-1]-h*Fp[1])
x.append(x[i-1]-h)
#print('x_',i,'=',x[i],',','y_',i,'=',y[i],',','r_',i,'=',r[i])
Figure = plt.figure(figsize=(8,6), dpi=80) # criando gráficos
lines_plotted = plt.plot([])
line_plotted = lines_plotted[0]
plt.xlim(0,L)
plt.ylim(0,60)
plt.plot(t,r,'*',color='blue', label='Rabbit')
plt.plot(x,y,'o',label='Dog',color='blue')
plt.ylabel('y')
plt.xlabel('x')
plt.title('Aproximação pelo método de Euler')
#plt.show()
def f(s): # Soulção exata y=f(x)
pf=( (s-240)*math.sqrt(s)+160*math.sqrt(80))/(12*math.sqrt(5))
return pf
fp=[]
xt=[]
xt.append(0)
fp.append(f(0))
for i in range(1,320+1):
xt.append(xt[i-1]+1/4)
fp.append(f(xt[i]))
plt.plot(xt,fp,color='red',label='y=f(x)')
plt.legend()
plt.show()
plt.close()
# Resolução do problema do cachorro e do coelho com argumento geométrico.
Figure = plt.figure(figsize=(8,6), dpi=80) # criando gráficos
lines_plotted = plt.plot([])
line_plotted = lines_plotted[0]
plt.xlim(-5,L)
plt.ylim(-5,60)
plt.plot(t,r,'*',label='Rabbit Euler',color='blue')
plt.plot(x,y,'o',label='Dog Euler',color='blue')
plt.ylabel('y')
plt.xlabel('x')
plt.title('Aproximação com passos do coelho em y e pelo método de Euler')
plt.plot(xt,fp,color='red',label='y=f(x)')
# Dando passos no eixo y, primeiro o coelho.
t=[] # Vetor para guardar coordenadas discretas do tempo t, de h em h.
r=[] # Vetor para guardar coordenadas discretas da posição do coelho (rabbit), no tempo t.
y=[] # Vetor para guardar coordenadas discretas da posição do cachorro (dog), no eixo y. Esperamos y=f(x).
x=[] # Vetor para guardar coordenadas discretas da posição do cachorro (dog), no eixo x.
t.append(0)
y.append(0)
x.append(80)
r.append(0)
h=50/n
for i in range(1,n+1):
t.append(0)
r.append(r[i-1]+h)
y.append(y[i-1]+2*h*(r[i]-y[i-1])/math.sqrt((x[i-1]-t[i-1])**2+(r[i]-y[i-1])**2))
x.append(x[i-1]-2*h*(x[i-1]-t[i-1])/math.sqrt((x[i-1]-t[i-1])**2+(r[i]-y[i-1])**2))
plt.plot(t,r,'*',color='purple',label='Rabbit geometrico')
plt.plot(x,y,'o',color='purple',label='Dog geométrico')
plt.legend()
plt.plot(t,r,color='black')
plt.plot(x,t,color='black')
plt.show()
plt.close()
To embed this project on your website, copy the following code and paste it into your website's HTML: