[关闭]
@wudawufanfan 2016-11-27T10:12:41.000000Z 字数 4960 阅读 1064

PRECESSION OF THE PERIHELION OF MERCURY


Precession is a common phenomenon in our life.Gyroscope_precession.gif
The object rotates while rotating around a fixed axis.This is a interesting experiment.At the same time astronomy is a precise science.We should know that most of the planets have orbits that are very nearly circular.The planets whose orbits deviate the most from circular are Mercury and Pluto.For Mercury the orientation of the axes of the ellipse that describes its orbit rotate with time.Different planets have differnt magnitude of this precession.For Mercury,the magnitude of this precession is approximately 566×1/3600 of a degree per century.
Precessing_Kepler_orbit_280frames_e0.6_smaller.gif
Until 1917,Einstein developed the theory of general relativity.
The force law predicted by general relativity is

The approach we take here is to calculate the rate of precession as a function of
u=2688207326,149336145&fm=23&gp=0.jpg
The length of the semimajor axis for Mercury's orbit is a=0.39AU

Conservation of total energy implies that the energies at points 1 and 2 are the same.Thus

the angular momentum at point 1 is equal to that at point 2,which yields
For aphelion of mercury, the velocity is 8.2AU/yr,and the distance to sun is and the distance of the perihelion is


  1. from pylab import *
  2. import matplotlib as mpl
  3. from math import sqrt, pi
  4. from mpl_toolkits.mplot3d import axes3d, Axes3D
  5. import numpy as np
  6. import matplotlib.pyplot as plt
  7. class Mecury():
  8. def __init__(self, initx=0.47, inity=0, initvx=0, initvy=8.2, dt=0.001, powerlaw=2., alpha=0.008, outputfile=''):
  9. self.dt=dt
  10. self.beta=powerlaw
  11. self.alpha=alpha
  12. self.filename=outputfile
  13. self.calculate(sqrt(initx*initx+inity*inity), initx, inity, initvx, initvy, 0.)
  14. self.dth=0.
  15. def stepOne(self, r, x, y, vx, vy, t):
  16. r=sqrt(x*x+y*y)
  17. vx=vx-(4*pi*pi*x*self.dt)/r**(self.beta+1)/(1+self.alpha/r**(self.beta))
  18. vy=vy-(4*pi*pi*y*self.dt)/r**(self.beta+1)/(1+self.alpha/r**(self.beta))
  19. x=x+vx*self.dt
  20. y=y+vy*self.dt
  21. t=t+self.dt
  22. return r, x, y, vx, vy, t
  23. def calculate(self, r, x ,y ,vx, vy, t):
  24. self.data=[(r, x,y,vx,vy,t)]
  25. while t<100:
  26. r, x, y, vx, vy, t=self.stepOne(r, x ,y ,vx, vy, t)
  27. self.data.append((r, x,y,vx,vy,t))
  28. if self.filename!='':
  29. self.store()
  30. def store(self):
  31. pass
  32. def plotMecury(self, figType=1):
  33. x=[]; y=[]; z=[0.]; vx=[]; vy=[]; t=[]; r=[]; xp=[]; yp=[]; k=[]
  34. for i in range(5000):
  35. (r1, x1, y1, vx1, vy1, t1)=self.data[i]
  36. x.append(x1); y.append(y1); vx.append(vx1); vy.append(vy1)
  37. t.append(t1); z.append(0.); r.append(r1)
  38. if i>2:
  39. dr1=r[i-1]-r[i-2]
  40. dr2=r[i]-r[i-1]
  41. if dr1>0 and dr2<0:
  42. xp.append(x[i-1])
  43. yp.append(y[i-1])
  44. m=len(self.data)
  45. if figType==1:
  46. plot(x,y)
  47. plot(0,0,'r*')
  48. for j in range(len(xp)):
  49. plot([0,xp[j]], [0,yp[j]],'k-')
  50. xlim(-0.55,0.55)
  51. ylim(-0.55,0.55)
  52. show()
  53. else:
  54. fig=plt.figure()
  55. ax=Axes3D(fig)
  56. ax.plot(x[0:m], y[0:m], z[0:m], label='Kepler')
  57. ax.legend()
  58. plt.show()
  59. def plotPrecessionrate(self, figType=1):
  60. x=[]; y=[]; z=[0.]; vx=[]; vy=[]; t=[]; r=[]; xp=[]; yp=[]; tp=[]; k=[];
  61. theta=[]; th=0.; dth=0.#dth=[]
  62. for i in range(3000):
  63. (r1, x1, y1, vx1, vy1, t1)=self.data[i]
  64. x.append(x1); y.append(y1); vx.append(vx1); vy.append(vy1)
  65. t.append(t1); z.append(0.); r.append(r1)
  66. if i>2:
  67. dr1=r[i-1]-r[i-2]
  68. dr2=r[i]-r[i-1]
  69. if dr1>0 and dr2<0:
  70. xp.append(x[i-1])
  71. yp.append(y[i-1])
  72. tp.append(t[i-1]-0.24500000000000019)
  73. m=len(self.data)
  74. n=len(xp)
  75. if figType==1:
  76. for j in range(n):
  77. k.append(yp[j]/xp[j])
  78. theta.append((180/pi)*(arctan((k[0]-k[j])/(1+k[0]*k[j]))))
  79. for l in range(n-1):
  80. th=th+theta[l+1]/tp[l+1]
  81. dth=th/n
  82. print (theta)
  83. print (tp)
  84. print (dth)
  85. #print th
  86. #print theta[0]/tp[0]
  87. plot(tp,theta)
  88. #plot(0,0,'r*')
  89. xlim(0,3)
  90. ylim(0,20)
  91. show()
  92. else:
  93. fig=plt.figure()
  94. ax=Axes3D(fig)
  95. ax.plot(x[0:m], y[0:m], z[0:m], label='Kepler')
  96. ax.legend()
  97. plt.show()
  98. #return dth
  99. def calculatedth(self, figType=1):
  100. x=[]; y=[]; z=[0.]; vx=[]; vy=[]; t=[]; r=[]; xp=[]; yp=[]; tp=[]; k=[];
  101. theta=[]; th=0.; dth=0.#dth=[]
  102. for i in range(3000):
  103. (r1, x1, y1, vx1, vy1, t1)=self.data[i]
  104. x.append(x1); y.append(y1); vx.append(vx1); vy.append(vy1)
  105. t.append(t1); z.append(0.); r.append(r1)
  106. if i>2:
  107. dr1=r[i-1]-r[i-2]
  108. dr2=r[i]-r[i-1]
  109. if dr1>0 and dr2<0:
  110. xp.append(x[i-1])
  111. yp.append(y[i-1])
  112. tp.append(t[i-1]-0.24500000000000019)
  113. m=len(self.data)
  114. n=len(xp)
  115. if figType==1:
  116. for j in range(n):
  117. k.append(yp[j]/xp[j])
  118. theta.append((180/pi)*(arctan((k[0]-k[j])/(1+k[0]*k[j]))))
  119. for l in range(n-1):
  120. th=th+theta[l+1]/tp[l+1]
  121. self.dth=th/n
  122. def calculaterate():
  123. listalpha=[]
  124. listdth=[]
  125. list1=[0,1,2,4,8,16]
  126. rate=0.
  127. for k in range(6):
  128. list1[k]=0.0002*list1[k]
  129. c=Mecury(alpha=list1[k])
  130. c.calculatedth()
  131. listalpha.append(c.alpha)
  132. #print c.alpha
  133. listdth.append(c.dth)
  134. #print c.dth
  135. print (listalpha,listdth)
  136. plot(listalpha, listdth, 'ro')
  137. for m in range(5):
  138. rate+=listdth[m+1]/listalpha[m+1]
  139. drate=rate/6
  140. print (drate)
  141. show()
  142. a=Mecury(alpha=0.01)
  143. a.plotMecury()
  144. #b=Mecury(alpha=0.0008)
  145. #b.plotPrecessionrate()
  146. #calculaterate()

QQ截图20161126110615.jpg

Clearly, this result is a little strange compared with other procession figure.

For a constant like 2.05 and a constant aphelion,change the eccentricity e.

code1.py

figure_1.png
figure_2.png
figure_4.png
figure_5.png

we include those figure into one gif.
优酷录屏2016-11-26-14-4-39.gif
we use the following figure to show the regularity.
QQ截图20161126132349.jpg
we can see the precession rate is increasing along the eccentricity.
of couse this is for orbit of ellipse but not for hyperbola and parabola
QQ截图20161126112242.jpg

Conclusion

The homework talk about the orbit of solar systerm.By supposing that the law deviates slightly from an inverse_square dependence to discuss a possible way to occur precession.

Reference

Wikipedia
computational physics;Nicholas J. Giordano, Hisao Nakanishi.

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