2013-10-12 27 views
0

疊加曲線,我想打一系列的曲線,通過使用這個腳本,使像視頻圖像:與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() 

但問題是,我只有第一個。有人能幫助我嗎?

回答

0

plot返回一個Line2D,您每次都通過循環更新y數據。如果你想看到的曲線所有,通過每次循環調用情節:

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() 

如果你試圖僞裝動畫,你需要添加一個pause所以你可以看到每個更新行:

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) 

此外,您的曲線在這個範圍內幾乎相同。