python绘制一维波动方程(初学者)

时间:2014-10-15 23:01:30

标签: python animation numpy matplotlib waveform

我刚开始学习如何用Python编写代码。我很感兴趣

  1. 如何重现u[x,t]矩阵。我试过了return u,它给我一个错误。
  2. 如果此代码中for循环的位置正确且运行正常。
  3. 最重要的是,我如何设置这个一维波动的动画,在那里我可以看到波是如何从高斯进化而分裂成两个相同高度的波。
  4. 这是我的代码:

    import numpy as np
    import matplotlib.pyplot as plt
    
    dx=0.1 #space increment
    dt=0.05 #time increment
    tmin=0.0 #initial time
    tmax=2.0 #simulate until
    xmin=-5.0 #left bound
    xmax=5.0 #right bound...assume packet never reaches boundary
    c=1.0 #speed of sound
    rsq=(c*dt/dx)**2 #appears in finite diff sol
    
    nx = int((xmax-xmin)/dx) + 1 #number of points on x grid
    nt = int((tmax-tmin)/dt) + 2 #number of points on t grid
    u = np.zeros((nt,nx)) #solution to WE
    
    #set initial pulse shape
    def init_fn(x):
        val = np.exp(-(x**2)/0.25)
        if val<.001:
            return 0.0
        else:
            return val
    
    for a in range(0,nx):
        u[0,a]=init_fn(xmin+a*dx)
        u[1,a]=u[0,a]
    
    #simulate dynamics
    for t in range(1,nt-1):
        for a in range(1,nx-1):
            u[t+1,a] = 2*(1-rsq)*u[t,a]-u[t-1,a]+rsq*(u[t,a-1]+u[t,a+1])
    
    
    # Where is the code that is needed to run the simulation?  
    

    我看到一些动画代码太复杂,我无法理解。任何人都可以帮我解决上面提到的问题吗?谢谢!

1 个答案:

答案 0 :(得分:3)

在文件的末尾执行:

fig = plt.figure()
plts = []             # get ready to populate this list the Line artists to be plotted
plt.hold("off")
for i in range(nt):
    p, = plt.plot(u[i,:], 'k')   # this is how you'd plot a single line...
    plts.append( [p] )           # ... but save the line artist for the animation
ani = animation.ArtistAnimation(fig, plts, interval=50, repeat_delay=3000)   # run the animation
ani.save('wave.mp4')    # optionally save it to a file

plt.show()

这里是mp4的gif:

enter image description here