[关闭]
@ibilis 2016-11-20T14:57:33.000000Z 字数 3406 阅读 512

第九次作业

计算物理


1.公式推导




the velocity after reflection from the wall is

2 代码如下

  1. from numpy import *
  2. import matplotlib.pyplot as plt
  3. def vxx(alpha):
  4. vtho=sqrt(2)
  5. vthe=[pi/4]
  6. vx=[vtho*cos(vthe[-1])]
  7. vy=[vtho*sin(vthe[-1])]
  8. x=[1]
  9. y=[0]
  10. the=[0]
  11. t=[0]
  12. dt=0.01
  13. xphase=[]
  14. vxphase=[]
  15. while t[-1]<50000:
  16. if -alpha*20<=x[-1]<=alpha*20:
  17. if y[-1]>20 or y[-1]<-20:
  18. vy.append(-vy[-1])
  19. vx.append(vx[-1])
  20. vthe.append(arctan(float(vy[-1]/vx[-1])))
  21. else:
  22. vx.append(vx[-1])
  23. vy.append(vy[-1])
  24. vthe.append(vthe[-1])
  25. if x[-1]>alpha*20:
  26. if y[-1]**2+(x[-1]-alpha*20)**2>=400:
  27. thee=arctan(float(y[-1]/(x[-1]-alpha*20)))
  28. vthe.append(pi-vthe[-1]+2*thee)
  29. vx.append(vtho*cos(vthe[-1]))
  30. vy.append(vtho*sin(vthe[-1]))
  31. else:
  32. vx.append(vx[-1])
  33. vy.append(vy[-1])
  34. vthe.append(vthe[-1])
  35. if x[-1]<-alpha*20:
  36. if y[-1]**2+(x[-1]+alpha*20)**2>=400:
  37. thee=arctan(float(y[-1]/(x[-1]+alpha*20)))
  38. vthe.append(pi-vthe[-1]+2*thee)
  39. vx.append(vtho*cos(vthe[-1]))
  40. vy.append(vtho*sin(vthe[-1]))
  41. else:
  42. vx.append(vx[-1])
  43. vy.append(vy[-1])
  44. vthe.append(vthe[-1])
  45. x.append(x[-1]+vx[-1]*dt)
  46. y.append(y[-1]+vy[-1]*dt)
  47. the.append(arctan(y[-1]/x[-1]))
  48. t.append(t[-1]+dt)
  49. if abs(y[-1])<=0.01:
  50. xphase.append(x[-1])
  51. vxphase.append(vx[-1])
  52. return xphase,vxphase
  53. plt.subplot(2,2,1)
  54. x=vxx(0)[0]
  55. vx=vxx(0)[1]
  56. plt.scatter(x,vx,s=0.1)
  57. plt.xlabel('x')
  58. plt.ylabel('vx')
  59. plt.title('alpha=0')
  60. plt.ylim(-1.414,1.414)
  61. plt.xlim(-10,10)
  62. plt.grid(True)
  63. plt.subplot(2,2,2)
  64. x=vxx(0.001)[0]
  65. vx=vxx(0.001)[1]
  66. plt.scatter(x,vx,s=0.1)
  67. plt.xlabel('x')
  68. plt.ylabel('vx')
  69. plt.title('alpha=0.001')
  70. plt.ylim(-1.414,1.414)
  71. plt.xlim(-10,10)
  72. plt.grid(True)
  73. plt.subplot(2,2,3)
  74. x=vxx(0.01)[0]
  75. vx=vxx(0.01)[1]
  76. plt.scatter(x,vx,s=0.1)
  77. plt.xlabel('x')
  78. plt.ylabel('vx')
  79. plt.title('alpha=0.01')
  80. plt.ylim(-1.414,1.414)
  81. plt.xlim(-10,10)
  82. plt.grid(True)
  83. plt.subplot(2,2,4)
  84. x=vxx(0.1)[0]
  85. vx=vxx(0.1)[1]
  86. plt.scatter(x,vx,s=0.1)
  87. plt.xlabel('x')
  88. plt.ylabel('vx')
  89. plt.title('alpha=0.1')
  90. plt.ylim(-1.414,1.414)
  91. plt.xlim(-10,10)
  92. plt.grid(True)
  93. plt.show()
  1. from numpy import *
  2. import matplotlib.pyplot as plt
  3. def vxx(alpha):
  4. vtho=sqrt(2)
  5. vthe=[pi/4]
  6. vx=[vtho*cos(vthe[-1])]
  7. vy=[vtho*sin(vthe[-1])]
  8. x=[1]
  9. y=[0]
  10. the=[0]
  11. t=[0]
  12. dt=0.01
  13. while t[-1]<1000:
  14. if -alpha*20<=x[-1]<=alpha*20:
  15. if y[-1]>20 or y[-1]<-20:
  16. vy.append(-vy[-1])
  17. vx.append(vx[-1])
  18. vthe.append(arctan(float(vy[-1]/vx[-1])))
  19. else:
  20. vx.append(vx[-1])
  21. vy.append(vy[-1])
  22. vthe.append(vthe[-1])
  23. if x[-1]>alpha*20:
  24. if y[-1]**2+(x[-1]-alpha*20)**2>=400:
  25. thee=arctan(float(y[-1]/(x[-1]-alpha*20)))
  26. vthe.append(pi-vthe[-1]+2*thee)
  27. vx.append(vtho*cos(vthe[-1]))
  28. vy.append(vtho*sin(vthe[-1]))
  29. else:
  30. vx.append(vx[-1])
  31. vy.append(vy[-1])
  32. vthe.append(vthe[-1])
  33. if x[-1]<-alpha*20:
  34. if y[-1]**2+(x[-1]+alpha*20)**2>=400:
  35. thee=arctan(float(y[-1]/(x[-1]+alpha*20)))
  36. vthe.append(pi-vthe[-1]+2*thee)
  37. vx.append(vtho*cos(vthe[-1]))
  38. vy.append(vtho*sin(vthe[-1]))
  39. else:
  40. vx.append(vx[-1])
  41. vy.append(vy[-1])
  42. vthe.append(vthe[-1])
  43. x.append(x[-1]+vx[-1]*dt)
  44. y.append(y[-1]+vy[-1]*dt)
  45. the.append(arctan(y[-1]/x[-1]))
  46. t.append(t[-1]+dt)
  47. return x,y
  48. plt.figure()
  49. plt.subplot(1,3,1)
  50. x=vxx(0)[0]
  51. y=vxx(0)[1]
  52. plt.scatter(x,y,s=0.01)
  53. plt.xlabel('x')
  54. plt.ylabel('y')
  55. plt.title('alpha=0')
  56. plt.subplot(1,3,2)
  57. x=vxx(0.01)[0]
  58. y=vxx(0.01)[1]
  59. plt.scatter(x,y,s=0.01)
  60. plt.xlabel('x')
  61. plt.ylabel('y')
  62. plt.title('alpha=0.01')
  63. plt.subplot(1,3,3)
  64. x=vxx(0.1)[0]
  65. y=vxx(0.1)[1]
  66. plt.scatter(x,y,s=0.01)
  67. plt.xlabel('x')
  68. plt.ylabel('y')
  69. plt.title('alpha=0.1')
  70. plt.show()

3.结果




用VPython结果如下

结论

更多的混沌行为等待去发现和研究

感谢吴雨桥同学的代码支持

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