Задать вопрос
@esgalimov

Моделирование движения тел в гравитационном поле на python (scipy.odeint, matplotlib, numpy). Как исправить?

Я моделирую движение вокруг Солнца с помощь python (scipy.odeint), строю графики с помощью matplotlib. Но мои решения не совпадают с учебником6051052ae98f5582439581.png Формулы, которые я использовал: 605105753e819095047053.png
Код:
from scipy.integrate import odeint
import scipy.constants as constants
import numpy as np
import matplotlib.pyplot as plt

M = 1.989 * (10 ** 30)
G = constants.G
alpha = 30
alpha0 = (alpha / 180) * np.pi
v00 = 0.7  # km/s
v0 = v00 * 1000  # m/s


def dqdt(q, t):
    x = q[0]
    y = q[2]
    ax = - G * M * (x / ((x ** 2 + y ** 2) ** 1.5))
    ay = - G * M * (y / ((x ** 2 + y ** 2) ** 1.5))
    return [q[1], ax, q[3], ay]

vx0 = v0 * np.cos(alpha0)
vy0 = v0 * np.sin(alpha0)
x0 = -1.5 * (10 ** 11)
y0 = 0 * (10 ** 11)
q0 = [x0, vx0, y0, vy0]

N = 1000000
t = np.linspace(0.0, 100000000000.0, N)

pos = odeint(dqdt, q0, t)

x1 = pos[:, 0]
y1 = pos[:, 2]

plt.plot(x1, y1, 0, 0, 'ro')
plt.ylabel('y')
plt.xlabel('x')
plt.grid(True)
plt.show()

Результаты:
А: 6051062bda632524100789.png
Б: 605106660a511802129633.png
В: 605106922a4fc625762560.png
C: 605106cab31cf882297062.png
Как мне это исправить?
Может вы сможете подсказать другой метод решения, например, с помощью метода Эйлера или с использованием других библиотек. Буду очень благодарен за любую помощь)
  • Вопрос задан
  • 613 просмотров
Подписаться 3 Сложный Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы