test.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. from mpl_toolkits import mplot3d
  4. from matplotlib import animation
  5. plt.style.use('seaborn')
  6. def init_fn(x, mu, sigma):
  7. return np.exp(-(x-mu)**2 / (2*sigma**2)) / (np.sqrt(2*np.pi) * sigma)
  8. L = 10 # length
  9. T = 100 # time
  10. c = 0.94
  11. dx = 0.01
  12. dt = 0.01
  13. sigma2 = (c*dt/dx) ** 2
  14. x = np.arange(0, L+dx, dx)
  15. t = np.arange(0, T+dt, dt)
  16. Nx = x.size
  17. Nt = t.size
  18. w = np.zeros((Nt, Nx))
  19. w[:,0] = 1
  20. w[:,-1] = 0
  21. w[0,:] = init_fn(x, x.mean(), 0.05)
  22. w[1,:] = w[0,:]
  23. for itime in range(2, Nt):
  24. for ix in range(1, Nx-1):
  25. w[itime,ix] = 2*w[itime-1,ix] - w[itime-2,ix] + sigma2 * (w[itime-1,ix+1] - 2*w[itime-1,ix] + w[itime-1,ix-1])
  26. # fig, axs = plt.subplots(nrows=4, ncols=3, figsize=(12, 10))
  27. plt.ion()
  28. idx = 0
  29. for _ in range(len(w)):
  30. plt.cla()
  31. plt.plot(x, w[idx,:])
  32. # axs[i,j].plot(x, w[idx,:], 'k')
  33. # axs[i,j].set_title('time = {:.2f}'.format(t[idx]))
  34. plt.ylim([-10, 10])
  35. idx += 10
  36. plt.pause(0.01)
  37. plt.draw()
  38. plt.tight_layout()
  39. print("hutao tianxiadiyi")