je suis en 2ème année de prépa. Nous travaillons sur les mouvements de foule pour notre tipe, nous avons récupéré un programme python mais nous ne comprenons pas à partir du " for it in np.arange(Nt): " Pourriez vous nous éclairer sur les différentes étapes qui composent le programme à partir de la boucle en question ?
Merci par avance.
Code : Tout sélectionner
import numpy as np
import matplotlib.pyplot as plt
plt.ion()
def vOd(u):
dist = u+L*(u<0)
# return U*(1-np.exp(-(dist-umin)/uc))*(dist>umin)
return U*((1-np.exp(-(dist-umin)/uc))**2)*(dist>umin)
def per(x):
return x-L*(x>L)
#
L = 40 # Longueur des abscisses
N = 20 # Nombre de points affichés
dt = 0.5; # Vitesse de simulation
Nt = 1000 #Temps total de la simu (*dt pour le temps réel)
aux =np.zeros(Nt)
U = 1 # Vitesse souhaitée des points
umin= 0.6
uc = 3
#tau0 = 3.2
tau0 = 6 #temps de réaction
tau = tau0
ue = L/N #Dij : distance entre chaque points
vOdpue = 2*U*np.exp(-(ue-umin)/uc)*(1-np.exp(-(ue-umin)/uc))/uc
kstab = tau*vOdpue
print('test',kstab)
xx = np.linspace(0.0,L-L/N,N) #talbeau de N zéros
xx+= 0.2*ue*(np.random.uniform(size=N)) # position de départ de chaque points
zz = np.zeros(np.shape(xx))
ww = np.zeros(np.shape(xx))
for it in np.arange(Nt): #pour it de 0 à Nt par intervalle de 1
Lxx = np.roll(xx,-1) #les points arrivés en fin de graphe reviennent au départ
uu = Lxx-xx
uu+= L*(uu<0)
aux[it] = uu[0]
ww = (ww+dt/tau*uu) / (1+dt/tau)
vv = vOd(ww)
xx += dt*vv
xx = per(xx)
plt.clf()
plt.plot(xx,zz,'.');
#plt.plot(xx[N-1],zz[N-1],'o')
plt.axis([0.,L,-5,5]) #Repère du graphe : x->0;L ; y-> -5;5
plt.axes().set_aspect('equal')
texte = 't ='+ str(int(0.1*it*dt)) +'s'+ ' k = ' + str(kstab) #on affiche la variation de temps et la valeur de kstab
plt.xlabel(texte)
plt.draw()
plt.show()
plt.pause(0.01) # pause (in seconds) to see the plot
plt.clf() # clear figure before next plot
print ('t ='+ str(int(0.1*it*dt)) +'s', ' Distance minimale :', np.min(uu))