Чтобы сделать орбиту планет с помощью Python - PullRequest
1 голос
/ 26 мая 2019

Я уже написал код для общего уравнения орбиты для значения 'r'(Radius) и пытаюсь построить график для x=r*cos(theta) и y=r*sin(theta), но мой код дает мне одно и то же значение 'x' для другого значенияИтак, я заканчиваю enter code here прямой линией вместо эллипса.

from numpy import *
import matplotlib.pyplot as plt
import pprint

L = 9.11*10**38     #L = angular momentum
m = 3.28*10**23     #m = mass of mercury
M = 1.99*10**30     #M = mass of sun
a = 5.8*10**7       #a = semi-major axis
G = 6.674*10**-11   #G = Gravitationl constant
k = G*M*m        
E = -k/(2*a)        #E = energy
p = L**2/(m*k)   
c = 1 + (2*E*L**2)/m*k**2
e = sqrt(-c)        #e = eccentricity

def fx(x):
    r = p/(1 + e*cos(x))
    return r

n = 1000
phi =linspace(0,2*pi,n)
radius = zeros([n])
theta = zeros([n])
x = zeros([n])
y = zeros([n])

for i in range(0,n):
    radius[i] = fx(phi[i])
    theta[i] = 180*phi[i]/pi

for i in range(0,n):
    x[i] = radius[i]*cos(phi[i])

for i in range(0,n):
    y[i] = radius[i]*sin(phi[i])

print('r =',radius)
print('x =',x)
print('y =',y)
plt.plot(x,y)
plt.show()

Вот скриншот моей книги по математике:

enter image description here

1 Ответ

3 голосов
/ 26 мая 2019

Есть (как минимум) две проблемы с вашим кодом:

1) a = 5.8*10**7 должно быть a = 5.8*10**10, поскольку (учитывая ваше G) вам нужно это расстояние в метрах, а не километрах.

2) Как отмечает @JohnO, вам нужно 1 + (2*E*L**2)/(m*k**2) вместо 1 + (2*E*L**2)/m*k**2

Если вы сделаете эти два изменения, вы получите разумный эллипс:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...