[关闭]
@ibilis 2016-12-18T11:53:35.000000Z 字数 1687 阅读 512

波动方程

未分类

  1. from __future__ import division
  2. from matplotlib import animation
  3. import matplotlib.pyplot as plt
  4. import numpy as np
  5. from copy import deepcopy
  6. fig = plt.figure()
  7. ax = fig.add_subplot(1,1,1,xlim=(0,1),ylim=(-1,1))
  8. line, = ax.plot([],[],lw=2)
  9. def init():
  10. x = np.linspace(0,1,101)
  11. y = np.exp(-1000*(x-0.3)**2)
  12. y[0] = 0
  13. y[-1] = 0
  14. line.set_data(x,y)
  15. return line,
  16. def iteration(num):
  17. x = np.linspace(0,1,101)
  18. y_now = np.exp(-1000*(x-0.3)**2)
  19. y_now[0] = 0
  20. y_now[-1] = 0
  21. y_before = deepcopy(y_now)
  22. y_after = np.zeros(101)
  23. for j in range(num):
  24. for i in range(101):
  25. if i== 0 or i== 100:
  26. y_after[i] = 0
  27. else:
  28. y_after[i] = - y_before[i] + y_now[i+1] + y_now[i-1]
  29. y_before = deepcopy(y_now)
  30. y_now = deepcopy(y_after)
  31. return y_now
  32. def animate(i):
  33. x = np.linspace(0,1,101)
  34. y = iteration(i)
  35. line.set_data(x,y)
  36. return line,
  37. anim1=animation.FuncAnimation(fig, animate, init_func=init, frames=200, interval=20)
  38. plt.xlabel('x(m)')
  39. plt.ylabel('y(m)')
  40. plt.title('wave on a string')
  41. plt.grid(True)
  42. plt.show()
  1. from __future__ import division
  2. import numpy as np
  3. from copy import deepcopy
  4. from cmath import *
  5. import matplotlib.pyplot as plt
  6. x = np.linspace(0,1,101)
  7. y_now = np.exp(-1000*(x-0.5)**2)
  8. y_now[0] = 0
  9. y_now[-1] = 0
  10. y_before = deepcopy(y_now)
  11. y_after = np.zeros(101)
  12. disp = [y_now[5]]
  13. t = [0]
  14. for j in range(2**(10)-1):
  15. for i in range(101):
  16. if i== 0 or i== 100:
  17. y_after[i] = 0
  18. else:
  19. y_after[i] = - y_before[i] + y_now[i+1] + y_now[i-1]
  20. y_before = deepcopy(y_now)
  21. y_now = deepcopy(y_after)
  22. disp.append(y_now[5])
  23. t.append((j+1)*10**(-4)/3)
  24. disp_fft = np.fft.fft(disp)
  25. disp_power = []
  26. frequency = []
  27. for i in range(1024):
  28. if i==0:
  29. disp_power.append(abs(disp_fft[i]))
  30. f = 0
  31. frequency.append(f)
  32. else:
  33. disp_power.append(abs(disp_fft[i]))
  34. T = 1024*10**(-4)/(3*i)
  35. f = 1/T
  36. frequency.append(f)
  37. plt.plot(frequency, disp_power)
  38. plt.xlabel('Frequency(Hz)')
  39. plt.ylabel('Power(arbitrary units)')
  40. plt.title('Power spectrum')
  41. plt.xlim(0,3000)
  42. plt.show()
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注