行星运动

这一次我们考虑太阳系中的行星运动问题

根据牛顿的万有引力定律:
![](http://latex.codecogs.com/png.latex?F_G=G\frac{M_S M_E}{r^2}
\newline M_s:mass\ of\ the\ Sun \newline M_E:mass\ of\ the\ earth
\newline r: the\ distance\ between\ s\ and\ e)

行星运动_第1张图片

![](http://latex.codecogs.com/png.latex?F_{G,X}=-G\frac{M_S M_E}{r^2}cos\theta\=-G\frac{M_S M_E X}{r^3})
![](http://latex.codecogs.com/png.latex?F_{G,Y}=-G\frac{M_S M_E y}{r^3})
将速度分解
![](http://latex.codecogs.com/png.latex?\frac{dv_x}{dt}=-G\frac{M_S x}{r^3} \quad \frac{dx}{dt}=v_x)
![](http://latex.codecogs.com/png.latex?\frac{dv_y}{dt}=-G\frac{M_S y}{r^3} \quad \frac{dy}{dt}=v_y)

for convenience,we use SI units
the radius of Earth's orbit is ~ 1.5*10^11 m,which is 1AU.
and:
![](http://latex.codecogs.com/png.latex?\frac{M_E v^2}{r}=F_G=G\frac{M_S M_E}{r^2})
and v:velocity of Earth
![](http://latex.codecogs.com/png.latex?GM_S = v^2r = 4\pi^2 AU3/yr2)
![](http://latex.codecogs.com/png.latex?v=2\pi r/(1 yr)=2\pi (AU/yr))

编程实现:


![]( http://latex.codecogs.com/png.latex?v_{x,i+1}=v_{x,i}-\frac{4\pi 2}{r_i3}\Delta t)
![]( http://latex.codecogs.com/png.latex?x_{i+1}=x_i + v_{x,i+1}\Delta t)
![]( http://latex.codecogs.com/png.latex?v_{y,i+1}=v_{y,i}-\frac{4\pi 2}{r_i3}\Delta t)
![]( http://latex.codecogs.com/png.latex?y_{i+1}=y_i + v_{y,i+1}\Delta t)

具体代码:

# -*- coding: utf-8 -*-
#  author:Ricardo #
# orbit of planet #
import math
import numpy as np
import matplotlib.pyplot as pl
class PlanetOrbit:
    def __init__(self,time_step=0.001,init_x=1,init_y=0,init_vx=0,init_vy=1.3*math.pi,
        beta=2.01,T_a=0.998,eccentricity=0.017,total_time=2):
        self.Kep = 4*pow(math.pi,2)/T_a
        self.e = eccentricity
        # init_vy = 2*math.pi/(1+self.e)*math.sqrt((1-self.e)*init_x/T_a)
        self.dt = time_step
        self.r = []
        self.x = [init_x]
        self.y = [init_y]
        self.vx = [init_vx]
        self.vy = [init_vy]
        self.t = total_time
        self.power = beta + 1
    def Run(self):
        loop = True
        i = 0
        while(loop):
            self.r.append(pow(((self.x[i])**2+(self.y[i])**2),0.5))
            self.vx.append(self.vx[i]-(self.Kep*self.x[i]*self.dt)/(self.r[i]**self.power))
            self.x.append(self.x[i]+self.vx[i+1]*self.dt)
            self.vy.append(self.vy[i]-(self.Kep*self.y[i]*self.dt)/(self.r[i]**self.power))
            self.y.append(self.y[i]+self.vy[i+1]*self.dt)
            i += 1
            if (i>=(self.t/self.dt-1)):
                loop = False
    def DrawOrbit(self):
        pl.plot(self.x,self.y,'.',label="beta = $self.beta$")
        pl.title('planet orbiting the Sun')
        pl.xlabel('x(AU)')
        pl.ylabel('y(AU)')
        pl.axis('equal' )
        pl.legend()
        pl.show()

考虑这种情况,如果万有引力定律遵循的并非是平方反比关系,而是如下的关系:
![](http://latex.codecogs.com/png.latex?F_G=G\frac{M_S M_E}{r^\beta})
参数β不同时,行星的轨道也会发生很大的变化,结果如下面的图所示:

行星运动_第2张图片

我们可以看到,当β值变化时,行星的运动轨道变化很大。β=2时,为一椭圆轨道,β为2.10时,行星的轨道是以太阳为焦点而进动的,β为2.01时,行星的轨道有少许偏移。

当β=3时,是这样的情况:


行星运动_第3张图片

行星直接落入焦点。

  • 由上面的讨论可以知道,行星运动的平方反比关系决定了行星能够稳定地做椭圆轨道的运动(当然上面这些讨论都是理想情况)

让我们计算不同的行星轨道:

  • Venus


    ![](http://latex.codecogs.com/png.latex?radius = 0.72AU)

  • Earth


    ![](http://latex.codecogs.com/png.latex?radius = 1.00AU)

  • Mars


    ![](http://latex.codecogs.com/png.latex?radius = 1.52AU)

行星运动_第4张图片

你可能感兴趣的:(行星运动)