[关闭]
@zy-0815 2016-11-21T01:03:25.000000Z 字数 2382 阅读 1183

计算物理第九次作业Problem3.30


摘要

上次作业研究了参数对混沌现象的影响,而这次作业着重于研究桌球的碰撞问题。

背景

已知运动方程为


碰撞方程为
image_1b219kl7l8of19sg105q1a7v1megm.png-15.6kB

正文

1、方形边界
程序为:

  1. import matplotlib.pyplot as plt
  2. vx = 3
  3. vy = 3.5
  4. x = [0.2]
  5. y = [0]
  6. dt = 0.01
  7. for i in range(10000):
  8. x.append(x[-1]+vx*dt)
  9. y.append(y[-1]+vy*dt)
  10. t = i*dt
  11. if x[-1]>1:
  12. r=(x[-2]-1)/(1-x[-1])
  13. y[-1]=(y[-2]+r*y[-1])/(r+1)
  14. x[-1]=1
  15. vx=-vx
  16. if x[-1]<-1:
  17. r=-(1+x[-2])/(x[-1]+1)
  18. y[-1]=(y[-2]+r*y[-1])/(r+1)
  19. x[-1]=-1
  20. vx=-vx
  21. if y[-1]>1:
  22. r=(y[-2]-1)/(1-y[-1])
  23. x[-1]=(x[-2]+r*x[-1])/(r+1)
  24. y[-1]=1
  25. vy=-vy
  26. if y[-1]<-1:
  27. r=-(1+y[-2])/(y[-1]+1)
  28. x[-1]=(x[-2]+r*x[-1])/(r+1)
  29. y[-1]=-1
  30. vy=-vy
  31. plt.plot(x,y)
  32. plt.xlabel('x')
  33. plt.ylabel('y')

运行结果为
image_1b219nt7o178d13mhg3j12c1ir413.png-23kB
改变速度方向,可得到:
image_1b219ubb6mc82ec1kjp7hb1nok2n.png-242.7kB
image_1b219ris3lgl2m08r91n6p1dlt2a.png-259.6kB
2、圆形边界
(1)一般圆桌碰撞
程序为:

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. v = 2
  4. a = 0.01
  5. x = [0.2]
  6. y = [0]
  7. vx = 2
  8. vy = 1.6
  9. dt = 0.01
  10. for i in range(10000):
  11. x.append(x[-1]+vx*dt)
  12. y.append(y[-1]+vy*dt)
  13. t = i*dt
  14. if (x[-1]*x[-1]+y[-1]*y[-1])>1:
  15. x[-1] = x[-2] + vx/100*dt
  16. y[-1] = y[-2] + vy/100*dt
  17. m = np.sqrt(x[-1]**2+y[-1]**2)
  18. x[-1] = x[-1]/m
  19. y[-1] = y[-1]/m
  20. v = np.sqrt(vx**2+vy**2)
  21. cos1 = (vx*x[-1]+vy*y[-1])/v
  22. cos2 = (vx*y[-1]-vy*x[-1])/v
  23. vt = -v*cos1
  24. vc = v*cos2
  25. vx = vt*x[-1]+vc*y[-1]
  26. vy = vt*y[-1]-vc*x[-1]
  27. plt.figure(figsize = (5,5))
  28. plt.xlim(-1,1)
  29. plt.ylim(-1,1)
  30. plt.plot(x,y)
  31. plt.xlabel('x')
  32. plt.ylabel('y')
  33. plt.title('Circular stadium - trajectory')

运行结果为:
image_1b21a6va41q4bs6cb5n15u1rn734.png-74.7kB
(2)从x轴切开距离为2ar
程序为:

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. v = 2
  4. a = 0.01
  5. x = [0.2]
  6. y = [0]
  7. vx = 2
  8. vy = 1.6
  9. dt = 0.01
  10. for i in range(5000):
  11. x.append(x[-1]+vx*dt)
  12. y.append(y[-1]+vy*dt)
  13. t = i*dt
  14. if (x[-1]*x[-1]+y[-1]*y[-1])>1 and y[-1]>0.01:
  15. while (x[-1]*x[-1]+y[-1]*y[-1])<1:
  16. x[-1] = x[-2] + vx/100*dt
  17. y[-1] = y[-2] + vy/100*dt
  18. m = np.sqrt(x[-1]**2+y[-1]**2)
  19. x[-1] = x[-1]/m
  20. y[-1] = (y[-1]-0.01)/m+0.01
  21. v = np.sqrt(vx**2+vy**2)
  22. cos1 = (vx*x[-1]+vy*(y[-1]-0.01))/v
  23. cos2 = (vx*(y[-1]-0.01)-vy*x[-1])/v
  24. vt = -v*cos1
  25. vc = v*cos2
  26. vx = vt*x[-1]+vc*(y[-1]-0.01)
  27. vy = vt*(y[-1]-0.01)-vc*x[-1]
  28. elif (x[-1]*x[-1]+y[-1]*y[-1])>1 and y[-1]<-0.01:
  29. while (x[-1]*x[-1]+y[-1]*y[-1])<1:
  30. x[-1] = x[-2] + vx/100*dt
  31. y[-1] = y[-2] + vy/100*dt
  32. m = np.sqrt(x[-1]**2+y[-1]**2)
  33. x[-1] = x[-1]/m
  34. y[-1] = (y[-1]+0.01)/m-0.01
  35. v = np.sqrt(vx**2+vy**2)
  36. cos1 = (vx*x[-1]+vy*(y[-1]+0.01))/v
  37. cos2 = (vx*(y[-1]+0.01)-vy*x[-1])/v
  38. vt = -v*cos1
  39. vc = v*cos2
  40. vx = vt*x[-1]+vc*(y[-1]+0.01)
  41. vy = vt*(y[-1]+0.01)-vc*x[-1]
  42. elif x[-1]<-1 and y[-1]>-0.01 and y[-1]<0.01:
  43. x[-1] = x[-2] + vx/100*dt
  44. y[-1] = y[-2] + vy/100*dt
  45. vx=-vx
  46. elif x[-1]>1 and y[-1]>-0.01 and y[-1]<0.01:
  47. x[-1] = x[-2] + vx/100*dt
  48. y[-1] = y[-2] + vy/100*dt
  49. vx=-vx
  50. plt.figure(figsize = (5,5))
  51. plt.xlim(-1,1)
  52. plt.ylim(-1,1)
  53. plt.plot(x,y)
  54. plt.xlabel('x')
  55. plt.ylabel('y')
  56. plt.title('Stadium billiard a=0.01')

运行结果为:
image_1b21af7s657l11e61v621dtk16b13h.png-50.5kB

结论

对于一般圆桌碰撞,无混沌现象;而当a=0.01时,图像会出现不规则的现象。

致谢

感谢周璟怡学姐的耐心帮助。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注