地球和月球轨道系统。我的数据有误

时间:2017-06-10 17:32:35

标签: python numerical astronomy orbit

有我的代码。我这样修好了:

# Take 3 digits for significant figures in this code

import numpy as np
from math import *
from astropy.constants import *
import matplotlib.pyplot as plt
import time

start_time = time.time()

"""
G = Gravitational constant
g0 = Standard acceleration of gravity ( 9.8 m/s2)
M_sun = Solar mass
M_earth = Earth mass
R_sun = Solar darius
R_earth = Earth equatorial radius
au = Astronomical unit

Astropy.constants doesn't have any parameter of moon.
So I bring the data from wikipedia(https://en.wikipedia.org/wiki/Moon)
"""

M_moon = 7.342E22
R_moon = 1.737E6


M_earth = M_earth.value
R_earth = R_earth.value
G = G.value

perigee, apogee = 3.626E8, 4.054E8

position_E = np.array([0,0])
position_M = np.array([(perigee+apogee)/2.,0])
position_com = (M_earth*position_E+M_moon*position_M)/(M_earth+M_moon)

rel_pE = position_E - position_com
rel_pM = position_M - position_com

F = G*M_moon*M_earth/(position_M[0]**2)

p_E = {"x":rel_pE[0], "y":rel_pE[1],"v_x":0, "v_y":(float(F*rel_pE[0])/M_earth)**.5}
p_M = {"x":rel_pM[0], "y":rel_pM[1],"v_x":0, "v_y":(float(F*rel_pM[0])/M_moon)**.5}

print(p_E, p_M)

t = range(0,365)

data_E , data_M = [], []

def s(initial_velocity, acceleration, time):
    result = initial_velocity*time + 0.5*acceleration*time**2
    return result

def v(initial_velocity, acceleration, time):
    result = initial_velocity + acceleration*time
    return result

dist = float(sqrt((p_E["x"]-p_M['x'])**2 + (p_E["y"]-p_M["y"])**2))

xE=[]
yE=[]
xM=[]
yM=[]

data_E, data_M = [None]*len(t), [None]*len(t)



for i in range(1,366):
    data_E[i-1] = p_E
    data_M[i-1] = p_M

    dist = ((p_E["x"]-p_M["x"])**2 + (p_E["y"]-p_M["y"])**2)**0.5

    Fg = G*M_moon*M_earth/(dist**2)

    theta_E = np.arctan(p_E["y"]/p_E["x"])

    theta_M = theta_E + np.pi #np.arctan(data_M[i-1]["y"]/data_M[i-1]["x"])

    Fx_E = Fg*np.cos(theta_E)
    Fy_E = Fg*np.sin(theta_E)
    Fx_M = Fg*np.cos(theta_M)
    Fy_M = Fg*np.sin(theta_M)

    a_E = Fg/M_earth
    a_M = Fg/M_moon

    v_E = (p_E["v_x"]**2+p_E["v_y"]**2)**.5
    v_M = (p_M["v_x"]**2+p_M["v_y"]**2)**.5

    p_E["v_x"] = v(p_E["v_x"], Fx_E/M_earth, 24*3600)
    p_E["v_y"] = v(p_E["v_y"], Fy_E/M_earth, 24*3600)

    p_E["x"] += s(p_E['v_x'], Fx_E/M_earth, 24*3600)
    p_E["y"] += s(p_E['v_y'], Fy_E/M_earth, 24*3600)

    p_M["v_x"] = v(p_M["v_x"], Fx_M/M_moon, 24*3600)
    p_M["v_y"] = v(p_M["v_y"], Fy_M/M_moon, 24*3600)

    p_M["x"] += s(p_M['v_x'], Fx_M/M_moon, 24*3600)
    p_M["y"] += s(p_M['v_y'], Fy_M/M_moon, 24*3600)

for i in range(0,len(t)):
    xE += data_E[i]["x"]
    yE += data_E[i]["y"]
    xM += data_M[i]["x"]
    yM += data_M[i]["y"]

print("\n Run time \n --- %d seconds ---" %(time.time()-start_time))

运行此代码后,我尝试打印data_E和data_M。 然后我可以得到数据,但没有区别。所有数据都是一样的。 但是当我逐步打印数据时,它完全不同。 我有错误的数据问题和增加距离问题。请帮我解决这个问题..

1 个答案:

答案 0 :(得分:1)

代码在第45行附近退出,您尝试通过在右侧拉负数的平方根来分配p_E(因为在移动时将地球的[0]坐标移到了负值)地球和月球进入其质心的坐标系)。在第45行中,F * rel_pE [0] / M_earth的值为负。因此,使用python 2.7.14,代码永远不会到达程序的末尾。在尝试讨论任何其他方面之前,必须先解决该错误。