Условие:
Формулировка задания
1. Составить математическую модель невозмущённого движения низкоорбитального космического аппарата.
2. Реализовать модель на языке C++.
3. Провести моделирование 100 витков траектории и определить накопленную погрешность параметров полёта.
Исходные данные
В качестве исходной орбиты принять круговую околоземную орбиту высотой ℎ и наклонением 𝑖 по варианту. Гравитационный параметр Земли 𝜇з принять равным 𝜇з=398600,45км3𝑐2, фигуру Земли считать сферической радиусом 6 371 км.
Обязательные требования к модели
1. Угловая ориентация КА не учитывается. Моделируется движение только центра масс. Модель движения должна быть пространственной.
2. Дифференциальные уравнения ММД интегрировать с шагом по времени не более Δ𝑡𝑖𝑛𝑡=0,01 при использовании алгоритма с постоянным шагом или с абсолютной точностью 0,1 и относительной точностью 1е-06 при использовании алгоритма с адаптивным шагом.
3. Вращение Земли не учитывается. Исходные данные: Высота, км - 226, угол наклона орбиты, град - 16. Пример начала кода на пайтон:
import numpy as np #pip3 install numpy в терминале
from matplotlib import pyplot as plt
import math
mum3s2 = 398600.4415e+09
1. задать уравнение ММД (правые части СДУ)
def rightsides(t:np.float64, statevec : np.ndarray) -> np.ndarray:
""" Statevec = [x y z Vx Vy Vz] """
global mum3s2
r = np.linalg.norm(statevec[0:3])
derivs = np.zeros(shape=[6])
derivs[0:3] = statevec[3:6]
derivs[3:6] = -mum3s2 /r**3 * statevec[0:3]
return dervis
r0 = 6371e+03+200e+03
V0circ = math.sqrt(mum3s2/r0)
print(f'V0circ = {V0circ}')
Vy0 = V0circ * math.cos(math.radians(45))
Vz0 = V0circ * math.sin(math.radians(45))
t0 = 0.0
statevec0 = np.array([
r0, 0.0, 0.0, #x y z
0.0, Vy0, Vz0 # Vx Vy Vz
])
print("rightsides= ", rightsides(t0, statevec0))
2. Задать начальные условия
r0 = 6371e+03+200e+03
V0circ = math.sqrt(mum3s2/r0)
print(f'V0circ = {V0circ}')
Vy0 = V0circ * math.cos(math.radians(45))
Vz0 = V0circ * math.sin(math.radians(45))
t0 = 0.0
statevec0 = np.array([
r0, 0.0, 0.0, #x y z
0.0, Vy0, Vz0 # Vx Vy Vz
])
3. Запустить цикл решения СДУ
revs = 0 # виток
while revs < 100:
#TODO расчёт одного шага интегрирования
if(zold<0 and z>0):
revs += 1
pass
4. Визуализация, анализ
Решение:
Для решения задачи о моделировании невозмущённого движения низкоорбитального космического аппарата, давайте разберем шаги, которые необходимо выполнить.
Шаг 1: Определение математической модели
Мы будем использовать уравнения движения для космического аппарата, которые описываются вторым законом Ньютона. В нашем случае, это будет:
\[
\frac{d^2\mathbf{r}}{dt^2} = -\frac{\mu}{r^3} \mathbf{r}
\]
где:
- \(\mathbf{r}\) — вектор положения космического аппарата,
- \(\mu\) — гравитационный параметр Земли,
- \(r\) — расстояние от центра Земли до космического аппарата.
Шаг 2: Реализация модели на языке C++
Теперь мы можем перейти к реализации модели на языке C++. Мы будем использовать метод Эйлера или метод Рунге-Кутты для интегрирования уравнений движения.
Вот пример кода на C++:
В приведенном коде мы интегрируем уравнения движения в течение 10000 шагов с шагом 0.01 секунды. Мы проверяем, когда космический аппарат пересекает плоскость z=0, чтобы подсчитать количество витков. Для анализа результатов можно использовать графические библиотеки, такие как Matplotlib в Python, или же выводить данные в файл и анализировать их в Excel или другом ПО. Таким образом, мы создали математическую модель, реализовали её на C++ и провели моделирование. Теперь вы можете использовать этот код для дальнейшего анализа и визуализации результатов.
