[关闭]
@OrionPaxxx 2016-12-04T10:29:43.000000Z 字数 5683 阅读 1281

computationalphysics

chaotic tumbling of hyperion

abstract

as wahat we already know pyperion,one smaller moons of Saturn,is tumbling in a chaotic way due to its irregular shape.I will study the simplified hyperion model in a nimerical way,and estimate the lyapunov exponenent for divergence of two nearby trajectories of the tumbling motion of of Hyperion.

background

Hyperion, also known as Saturn VII, is a moon of Saturn discovered by William Cranch Bond, George Phillips Bond and William Lassell in 1848. It is distinguished by its irregular shape, its chaotic rotation, and its unexplained sponge-like appearance. It was the first non-round moon to be discovered.

- equations for Hyperion's trajectory
the inverse-square law of gravitation:


we write it as two first-order differental equation so that we can use euler-cromer method:

for circular motion we know that the force must be equal to ,which lead to:

where we chose proper units(unit of lenth to be radius of Hyperion's orbit,which we might called "Hyperion unit",and that of time to be the orbit period of Hyperion around Saturn(1"Hyperion-year")):

Given the equations above and Euler-cromer method, we can calculate the trajectory of Hyperion.
- equations for qualitively estimate the chaotic tumbling of Hyperion
since our objective is simply to show that teh motion of such an irregularly shaped moon can be chaotic,we consider the model as two particles , and ,connected bby a massless rod in orbit around a massive object located at the origion..we let be the angle that the rod makes with the axis and define the associated angular velocity ,and as the distence of the motion of the center of the mass , and as the position of teh center of mass.
after some algebra,we get:

main body

  1. import numpy as np
  2. import pylab as pl
  3. import math
  4. class hyperion:
  5. def __init__(self,x0=1,y0=0,vx=0,vy=2*math.pi,dt=0.0001,total_time=10,initial_theta=0,initial_omega=0):
  6. self.x=[x0]
  7. self.y=[y0]
  8. self.r=[math.sqrt(x0**2+y0**2)]
  9. self.vx=[vx]
  10. self.vy=[vy]
  11. self.dt=dt
  12. self.t=[0]
  13. self.tt=total_time
  14. self.th=[initial_theta]
  15. self.om=[initial_omega]
  16. self.a=0
  17. self.b=0
  18. self.ecc=0
  19. self.dtheta=[]
  20. def run(self):
  21. while self.t[-1]<self.tt:
  22. self.vx.append(self.vx[-1]-4*math.pi**2*self.x[-1]/self.r[-1]**3*self.dt)
  23. self.vy.append(self.vy[-1]-4*math.pi**2*self.y[-1]/self.r[-1]**3*self.dt)
  24. self.x.append(self.x[-1]+self.vx[-1]*self.dt)
  25. self.y.append(self.y[-1]+self.vy[-1]*self.dt)
  26. self.r.append(math.sqrt(self.x[-1]**2+self.y[-1]**2))
  27. temp=-12*math.pi**2*(self.x[-1]*math.sin(self.th[-1])-self.y[-1]*math.cos(self.th[-1]))\
  28. *(self.x[-1]*math.cos(self.th[-1])+self.y[-1]*math.sin(self.th[-1]))
  29. self.om.append(self.om[-1]+temp*self.dt)
  30. self.th.append(self.th[-1]+self.om[-1]*self.dt)
  31. if self.th[-1]>math.pi:
  32. self.th[-1]-=2*math.pi
  33. elif self.th[-1]<-math.pi:
  34. self.th[-1]+=2*math.pi
  35. self.t.append(self.t[-1]+self.dt)
  36. self.a=(max(self.x)-min(self.x))/2
  37. self.b=(max(self.y)-min(self.y))/2
  38. self.ecc=math.sqrt(math.fabs(self.a**2-self.b**2))/self.a
  39. def showth(self):
  40. pl.title("Hyperion $\\theta$ versus time")
  41. pl.xlabel("time(Hyperion-year)")
  42. pl.ylabel("$\\theta (radius)$")
  43. pl.xlim(0,10)
  44. pl.plot(self.t, self.th,label="eccentricity=%.2f"%self.ecc)
  45. pl.legend()
  46. pl.grid(True)
  47. pl.show()
  48. def showom(self):
  49. pl.title("Hyperion $\\omega$ versus time")
  50. pl.xlabel("time(Hyperion-year)")
  51. pl.ylabel("$\\omega (radius)$")
  52. pl.xlim(0,10)
  53. pl.plot(self.t, self.om,label="eccentricity=%.2f"%self.ecc)
  54. pl.legend()
  55. pl.grid(True)
  56. pl.show()
  57. #plot theta or omega versus time
  58. a=hyperion()
  59. a.run()
  60. a.showth()
  61. a=hyperion()
  62. a.run()
  63. a.showom()
  64. #plot delta theta versus time and calculate the lyapuniv exponent
  65. class qwer(hyperion):
  66. def haha(self):
  67. _d=0.01
  68. _vy=2*math.pi-1.1
  69. a=hyperion(vy=_vy)
  70. a.run()
  71. print(a.ecc)
  72. tempth1=a.th
  73. a=hyperion(vy=_vy,initial_theta=_d)
  74. a.run()
  75. tempth2=a.th
  76. for i in range(len(tempth2)):
  77. a.dtheta.append(math.log(math.fabs(tempth2[i]-tempth1[i])))
  78. pl.plot(a.t,a.dtheta,label="eccentricity=%.4f"%a.ecc)
  79. dd=[]
  80. tt=[]
  81. for j in range(len(a.dtheta)):
  82. dd.append(a.dtheta[j])
  83. tt.append(a.t[j])
  84. z=np.polyfit(tt,dd,1)
  85. p=np.poly1d(z)
  86. print(p)
  87. linspx=np.linspace(0,8)
  88. linspy=z[0]*linspx+z[1]
  89. pl.plot(linspx,linspy,label="lyapunov exp=%.4f"%z[0])
  90. pl.xlabel("time(Hyperion-year)")
  91. pl.ylabel("$\\Delta\\theta(radius)$")
  92. pl.title("Hyperion $\\Delta\\theta$ versus time for initial $\\Delta\\theta$=%.3f"%_d)
  93. pl.legend()
  94. b=qwer()
  95. b.haha()
eccentricity lyapunov exponent eccentricity lyapunov exponent
0.0004 0.0234 0.1528 0.4547
0.0316 0.0229 0.1819 0.5106
0.0626 0.0133 0.2104 0.3092
0.0932 0.0129 0.2384 0.2769
0.1223 0.0699 0.2930 0.1793

I plot the table in the next picture:
91.png
it doesn't looks like anything to me.

conclusion

acknowledgement

Nicholas J.Giodano's computational physics.

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