Dans le cadre de mon TIPE, je dois utiliser un Euler vectoriel pour avoir l'évolution de la hauteur d'eau dans un réservoir.
Voici le code que j'ai écrit (il renvoie quelque chose, mais ce n'est pas ce à quoi je m'attend. La courbe devrait avoir l'allure d'un oscillateur harmonique amorti, à cause des frottements...)
Code : Tout sélectionner
import numpy as np
import matplotlib.pyplot as plt
g=9.81
H=0.5
V0=np.sqrt(2*g*H)
L0=5
to=0.15
alpha=2.4678*10**(-3)
def fonction(t,Z):
V=np.array([Z[1],((V0*L0)/to+g*(H-Z[0])-0.5*(alpha*Z[1]+V0*(1-t/to))**2)/(L0*alpha+Z[0])])
return V
def Euler(Zini, h, Tmaxi, f ):
n=int(Tmaxi/h)+1
T=np.linspace(0, Tmaxi, n)
M = np.zeros([n,2])
M[0]=Zini
for k in range(n-1):
M[k+1]=M[k]+h*f(T[k], M[k])
return M
#Test
M = Euler([0.1,0],0.001,10,fonction)
L=np.linspace(0,5,10001)
plt.plot(L, M[:,0])
plt.xlim(0,10)
plt.ylim(-50,100)
plt.show()
Si quelqu'un pouvait jeter un coup d’œil, ce serait sympa !
A+