[关闭]
@c-xy 2016-11-06T15:40:29.000000Z 字数 1853 阅读 414

第七次作业


本次作业包括习题3.12 3.13 3.14
3道题代码见后方

习题3.12

对于一个单摆,我们给予它一个周期性正弦驱动力。在考虑阻尼的情况下,做出了它的角速度-摆角(相空间)的图像。我们只选取其中驱动力位于一个周期的位置处的相空间的点。最终结果如下图
位于驱动力相位为$\pi/4$时的相空间图

习题3.13

此题研究的系统与上图相同。在此观察两个几乎相同的单摆,其唯一不同是初始摆角相差千分之一弧度。如下做出其摆角差(取对数)与时间的图像,会发现摆角差随时间大致沿指数增长。由此可以观察混沌现象
具有微小不同初始值的两个摆角相位差变化图

习题3.14

本题与上一题类似,也是研究两个几乎相同的单摆。但这次是将阻尼系数设置为一个微小的差值。同样做出其摆角差(取对数)与时间的图像。观察发现,一段时间后摆角差依然会大致沿指数增长。
具有微小阻尼系数差的两个摆角相位差变化图

代码如下

  1. """
  2. by Cao Xinyu,2016/10/31
  3. for exercises 3.12 3.13 3.14
  4. """
  5. import pylab
  6. from math import *
  7. def resetangle(angle):
  8. angle+=pi
  9. angle%=pi*2
  10. angle-=pi
  11. return angle
  12. class pendulum:
  13. def __init__(self,thet0,omega0,FD,length=9.8,q=0.5,omegaD=2/3,timestep=0.04,tmax=100):
  14. self.thet=[thet0]
  15. self.omega=[omega0]
  16. self.times=[0]
  17. self._FD=FD
  18. self._l=length
  19. self._dt=timestep
  20. self._q=q
  21. self._tmax=tmax
  22. self.g=9.8
  23. self._omegaD=omegaD
  24. self.calculate()
  25. def calculate(self):
  26. while self.times[-1]<self._tmax:
  27. self.omega.append(self.omega[-1]+self._dt*(-self.g/self._l*sin(self.thet[-1])-self._q*self.omega[-1]+self._FD*sin(self._omegaD*self.times[-1])))
  28. self.thet.append(self.thet[-1]+self.omega[-1]*self._dt)
  29. self.times.append(self.times[-1]+self._dt)
  30. #3.12
  31. a=pendulum(0.2,0,1.2,tmax=10000)
  32. size=len(a.times)
  33. lomega=[]
  34. lthet=[]
  35. for i in range(size):
  36. if abs((a.times[i]*2/3)%(2*pi)-pi/4)<=0.04*2/3 :
  37. lomega.append(a.omega[i])
  38. lthet.append(resetangle(a.thet[i]))
  39. pylab.plot(lomega,lthet,'.')
  40. pylab.xlabel('$\omega$ (rad/s)')
  41. pylab.ylabel('$\Theta$ (rad)')# cannot theta?
  42. pylab.xlim(min(lomega),max(lomega))
  43. pylab.ylim(-pi,pi)
  44. pylab.show()
  45. #3.13
  46. b=pendulum(0.201,0,1.2)
  47. size=len(b.times)
  48. llogdiffthet=[]
  49. for i in range(size):
  50. llogdiffthet.append(log(abs(resetangle(a.thet[i]-b.thet[i]))))
  51. pylab.plot(b.times,llogdiffthet,'.')
  52. pylab.xlabel('time (s)')
  53. pylab.ylabel('log($\Delta$ $\Theta$) (rad)')
  54. pylab.show()
  55. #3.14
  56. c=pendulum(0.2,0,1.2,q=0.501)
  57. ldiffthet2=[]
  58. for i in range(size):
  59. ldiffthet2.append(abs(a.thet[i]-c.thet[i]))
  60. pylab.plot(c.times,ldiffthet2,'.')
  61. pylab.xlabel('time (s)')
  62. pylab.ylabel('log($\Delta$ $\Theta$) (rad)')
  63. pylab.show()
  64. pass
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注