2013-10-12 5 views
0
superposition

Je veux faire une série de courbes pour rendre l'image comme une vidéo en utilisant ce script:courbes avec matplotlib

from pylab import * 
a = 1 
L = 3.0 
T = 1 
dx = 1e-3 
dt = 1e-2 

NX = int(ceil(L/dx)) 
NT = int(ceil(T/dt)) 

X = np.linspace(-L,L, NX) 
U0 = 1./sqrt(2*np.pi)*np.exp(-X**2/2) 
Un = U0 
Unext = zeros(NX) 
line, = plot(X,U0) 
show() 

for n in range(NT): 
    Unext[1:-2] = 1./2*(Un[2:-1]+Un[0:-3]) 
    Unext[1:-2] += -a*dt/2*dx*(Un[2:-1]+Un[0:-3]) 
    Un = Unext 
    line.set_ydata(Un) 
    draw() 

Mais le problème est que j'ai le premier seulement. Quelqu'un peut-il m'aider s'il vous plaît?

Répondre

0

plot renvoie un Line2D, dont vous mettez à jour les données y à chaque fois dans la boucle. Si vous voulez voir tous des courbes, appelez tracé chaque fois à travers la boucle:

for n in range(NT): 
    Unext[1:-2] = 1./2*(Un[2:-1]+Un[0:-3]) 
    Unext[1:-2] += -a*dt/2*dx*(Un[2:-1]+Un[0:-3]) 
    Un = Unext 
    plot(X, Un) 
    draw() 

Si vous essayez d'animation faux, vous devez ajouter un pause vous pouvez donc voir chaque ligne mise à jour:

for n in range(NT): 
    Unext[1:-2] = 1./2*(Un[2:-1]+Un[0:-3]) 
    Unext[1:-2] += -a*dt/2*dx*(Un[2:-1]+Un[0:-3]) 
    Un = Unext 
    line.set_ydata(Un) 
    draw() 
    plt.pause(.1) 

De plus, vos courbes sont presque identiques pour cette plage.

Questions connexes