Сначала я изложу свой математический вопрос о матрицах распространения состояния и перехода состояния , а затем покажу вам простую задачу, для которой я хотел бы использовать эти концепции для создания семейства плотно расположенных гало-орбит.
Я также начну с утверждения, что я ищу Aha! напечатайте ответ. Я не надеюсь на объяснение, пока это превосходное интуитивное объяснение кватернионов . Мне не нужно, чтобы все было проработано, просто какое-то объяснение того, как можно понять, получить и использовать Матрицу переходов состояний в этом контексте.
Следующее довольно стандартно, я цитирую из статьи, которая оказалась у меня под рукой, Хуан Сенент, Сезар Окампо и Антонио Капелла; Переходы с малой тягой и переменным импульсом и наведение на нестабильные периодические орбиты. Журнал руководства, контроля и динамики, 28 (2) марта – апреля 2005 г .:
Для динамической системы
оценивается из некоторым , дифференциал конечного состояния при дан кем-то
где матрица перехода состояний удовлетворяет
а также
а также - якобиан векторного поля, используемого в качестве матрицы распространения состояния,
Я начал с классической статьи , написанной Кэтлин Коннор Хауэлл «Трехмерные , периодические «гало» орбиты небесной механики 32 (1984) 53-71». В нем описывается метод поиска решений для гало-орбит в круговой ограниченной задаче трех тел (CR3BP), очень близкий к методу, описанному Бреквеллом, Дж. В. и Брауном, Дж. В.: 1979, Семейство трехмерных периодических орбит «Гало». в ограниченной задаче трех тел Земля-Луна Целест. мех. 20 , 389.
Howell, 1984, подробно описывает пошаговую процедуру нахождения членов семейства гало-орбит относительно коллинеарных точек либрации Лагранжа, обладающих симметрией относительно плоскости xz, используя тот факт, что для этой группы орбит три из шести компонент вектора состояния должны сходиться к нулю в точке пересечения орбиты с плоскостью.
В статье приведены шесть примеров гало-орбит, и с приведенными там числами я могу проинтегрировать векторы состояния, убедиться, что три компонента вектора состояния действительно проходят через ноль в середине орбиты и составляют хороший график.
Что я хотел бы сделать, так это интуитивно понять, что такое вектор распространения состояния и вектор перехода состояния, и как использовать их для более быстрой сходимости на новом члене семейства гало-орбит, чем если бы я только начал снимать орбиты в кластере. вокруг начальной точки и использовал что-то простое, например, наискорейший спуск, чтобы найти следующую орбиту с все равно нулю.
куда
ПРИМЕЧАНИЕ! Я считаю, что метки для позиций L и я в GIF и скрипт переставлены (неправильные метки/названия). Я скоро обновлю изображение.
def deriv(X, t):
x, y, z, xdot, ydot, zdot = X
r1 = np.sqrt((x + mu)**2 + y**2 + z**2)
r2 = np.sqrt((x - 1. + mu)**2 + y**2 + z**2)
term_1 = x + 2. * ydot
term_2 = -(1.-mu) * (x + mu) / r1**3
term_3 = -mu * (x - 1. + mu) / r2**3
xddot = term_1 + term_2 + term_3
term_1 = -2. * xdot
term_2 = 1. - (1.-mu)/r1**3 - mu/r2**3
yddot = term_1 + y * term_2
term_1 = (1. - mu)/r1**3 + mu/r2**3 # should be plus???
zddot = -z * term_1
return np.array([xdot, ydot, zdot, xddot, yddot, zddot])
class Sat(object):
def __init__(self, X0, T0, nu12):
self.X0 = X0
self.pos0 = X0[:3]
self.v0 = X0[3:]
self.T0 = T0
self.nu1, self.nu2 = nu12
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint as ODEint
from mpl_toolkits.mplot3d import Axes3D
# From "Three-Dimensional, Periodic 'Halo' Orbits,
# Kathleen Connor Howell, Celestial Mechanics 32 (1984) 53-71
pi, twopi = np.pi, 2*np.pi
mu = 0.04
# starting points:
x0 = [0.723268, 0.729988, 0.753700, 0.777413, 0.801125, 0.817724]
y0 = 6*[0.0]
z0 = [0.040000, 0.215589, 0.267595, 0.284268, 0.299382, 0.313788]
xdot0 = 6*[0.0]
ydot0 = [0.198019, 0.397259, 0.399909, 0.361870, 0.312474, 0.271306]
zdot0 = 6*[0.0]
# X0s = np.array(zip(x0, y0, z0, xdot0, ydot0, zdot0)) Nope!
X0s = np.array(list(zip(x0, y0, z0, xdot0, ydot0, zdot0)))
Thalf0s = [1.300177, 1.348532, 1.211253, 1.101099, 1.017241, 0.978653]
T0s = [2.0*x for x in Thalf0s]
nu1s = [1181.69, 51.07839, 4.95816, 1.101843, 0.94834, 1.10361]
nu2s = [ 0.98095, -0.90203, -0.40587, -0.420200, -1.58429, -2.09182]
nu12s = zip(nu1s, nu2s)
n_half = 200
fractional_times = np.linspace(0.0, 1.0, 2*n_half+1)
rtol, atol = 1E-12, 1E-12
sats = []
for X0, T0, nu12 in zip(X0s, T0s, nu12s):
sat = Sat(X0, T0, nu12)
sat.n_half = n_half
sat.t = sat.T0 * fractional_times
sat.rtol, sat.atol = rtol, atol
sats.append(sat)
for sat in sats:
answer, info = ODEint(deriv, sat.X0, sat.t,
rtol=sat.rtol, atol=sat.atol,
full_output = True )
sat.answer = answer
sat.mid = answer[sat.n_half]
sat.mid = answer[sat.n_half]
sat.info = info
if 1 == 1:
xL2, xL1 = 0.74091, 1.21643 # lazy!
fig = plt.figure(figsize=[10, 8])
ax = fig.add_subplot(1, 1, 1, projection='3d')
for sat in sats:
x, y, z = sat.answer.T[:3]
ax.plot(x, y, z)
ax.plot([0.0-mu], [0], [0], 'ob', markersize=20)
ax.plot([1.0-mu], [0], [0], 'og', markersize=12)
ax.plot([xL2], [0], [0], 'ok', markersize=8)
ax.plot([xL1], [0], [0], 'ok', markersize=8)
ax.set_xlim(0.7, 1.25)
ax.set_ylim(-0.225, 0.225)
ax.set_zlim(-0.15, 0.40)
ax.text(xL1, 0, -0.05, "L1", fontsize=14, horizontalalignment='center')
ax.text(xL2, 0, -0.05, "L2", fontsize=14, horizontalalignment='center')
nplot = 80
thetas = np.linspace(0, twopi, nplot+1)[:-1]
azimuths = -90 + 10.0 * np.cos(thetas)
fnames = []
for i, azim in enumerate(azimuths):
fname = "haloz_3D_" + str(10000+i)[1:]
ax.elev, ax.azim = 0, azim
plt.savefig(fname)
fnames.append(fname)
# tight cropping
for i in range(len(fnames)):
fname_in = "haloz_3D_" + str(10000+i)[1:]
fname_out = "haloz_3D_crop_" + str(10000+i)[1:] + ".png"
img = plt.imread(fname_in + ".png")
plt.imsave(fname_out, img[200:-175, 240:-190])
СТМ представляет собой процедуру линеаризации динамической системы. Он может использоваться для любой нелинейной динамической системы и используется для аппроксимации динамики системы за короткий период времени. В астродинамике он используется, в частности, для статистического определения орбиты (stat OD) и круговой ограниченной задачи третьего тела (CRTBP).
Вычисление STM для статистической OD подробно объясняется в «Статистическом определении орбиты» Tapley, Schultz, Born, Elsevier 2004. В частности, в разделах 1.2.5 и 4.2.1. С этого момента эта ссылка будет обозначаться как «(1)».
Позволять быть состоянием вашей системы в декартовой системе координат. В следующих, а также соответственно соответствуют положению и скорости КА; соответствует производной по времени переменная. Выбор положения и скорости часто используется для задач начального уровня. Если вы делаете более серьезную статистическую OD, вы также захотите добавить гравитационный параметр, положение ваших наземных станций и т. д., но важно отметить, что изменение вашего вектора состояния также изменит STM и матрицу A (см. ниже).
Затем мы можем выразить производную по времени состояния следующим образом:
В этой формулировке функция соответствует полной динамике системы: эта функция интегрируется по времени, если вы вычисляете реальную динамику, т.е. это представление уравнений движения. Предполагая задачу двух тел, есть ускорение, обусловленное только первичным телом, т.е. . Если моделировать более сложную динамику, функция также будет включать их.
Как было сказано выше, STM — это линеаризация вашей динамики. Итак, мы начнем с дискретизации времени и предположения , что система ведет себя линейно в течение этого времени. Это очень полезное приближение. На самом деле, это позволяет упростить моделирование: вместо того, чтобы распространять вашу динамику (т.е. функция) за заданное время интегрирования вам просто нужно умножить состояние с СТМ чтобы получить . Кроме того, согласно (1), STM имеет следующие свойства (номер раздела и страницы указан в первой строке для справки):
Итак, на данный момент мы знаем, что СТМ — это линеаризация динамической системы, которая позволяет нам рассматривать ее как линейную систему в течение короткого периода времени. Итак, нам нужно линеаризовать динамику системы вокруг заданного состояния, здесь ссылка . Эта ссылка основывается на времени и обновляется через STM. Другими словами, мы вычисляем начальный STM, вычисляем состояние в следующий раз, а затем повторно вычисляем STM вокруг этого нового состояния.
Ниже приводится отрывок из лекции доктора МакМэхона. То, что отмечено звездочкой, соответствует эталонному состоянию.
Мы можем ясно видеть здесь, что мы просто вычисляем ряд Тейлора работать с первого раза! Итак, математически это просто. Однако на практике это соответствует производной ускорения, так что это немного утомительно для вычислений (но Mathematica или Sage Math (теперь CoCalc) могут помочь с их символьными производными, это может помочь ). Во всяком случае, это частичное обычно упоминается как матрица (по крайней мере, по моему опыту).
Связь между матрицей A и STM из «Анализ лагранжевой среды Солнце-Земля для New Worlds Observer (NWO)», Deccia 2017 ( ссылка )
Я думаю, что хорошим примером является рассмотрение того, как это можно сделать в коде (это из моей библиотеки астродинамики, которая находится на Голанге, извините... я думаю/надеюсь, что это все еще относительно читабельно). Во- первых, вычисление матрицы А с рядом возможных возмущений на основе конфигурации миссии. Во- вторых, серия тестовых случаев . Помимо прочего, тест проверяет, что норма разницы между предыдущим состоянием и новым состоянием (рассчитанная с помощью СТМ) находится в пределах (это несколько произвольно, но состояние имеет положение и скорость космического корабля LEO, так что это небольшая разница). В-третьих, вы можете проверить исходный код GMAT (который я сделал доступным на Github для удобства — проверьте их репозиторий sourceforge на наличие последних обновлений).
Судя по вашему вопросу, вы уже знаете орбиты гало, поэтому я не буду углубляться в них (я в любом случае не эксперт в них, поэтому могу сказать неправильные вещи). Короче говоря, гало вращается по квазипериодическим орбитам вокруг точек либрации (они периодические в CRTPB). Точки либрации — это точки равновесия между двумя массивными телами. По сути, орбита будет периодической в течение заданного времени. (и, следовательно, быть гало-орбитой) тогда и только тогда, когда на половине ее периода движение (т. е. скорость) космического корабля равно нулю во всех направлениях, кроме одного. Этот раздаточный материал доктора Дэвиса (из CCAR в CU Boulder) по поиску орбит гало из первоначального предположения подробно описывает, как это запрограммировать. Добавлю следующие уточнения:
Почему вы хотите использовать STM для поиска орбит Halo вместо того, чтобы перебирать все подряд?
Отказ от ответственности: я не проверял этот код Matlab. Он может содержать ошибки, иметь пограничные случаи, ломаться в определенных случаях и т. д. и т. д. Но это может помочь получить представление о том, как это реализовать: непроверенный код . (Я думаю, что я включил все файлы, необходимые для запуска этого, но если это не так, дайте мне знать в комментариях, и я добавлю его - у меня нет проблем с тем, чтобы поделиться своим кодом, как раз наоборот)
Давайте попробуем! Для простоты я буду рассматривать одномерное уравнение движения
Приложения к гало-орбите на самом деле проще, потому что коэффициенты а также не будет зависеть от времени.
Теория линейных дифференциальных уравнений сообщает нам два важных результата:
Первый результат означает, что должна существовать функция, отображающая на . Второй результат гарантирует, что эта функция является линейной, т.е.
Но тогда скорость имеет тот же вид
и поэтому мы можем собрать все вместе
А также называется матрицей перехода от времени ко времени .
Из этого уравнения, поскольку удовлетворяет дифференциальному уравнению (1), с которого мы начали, мы можем разумно ожидать чтобы удовлетворить один слишком. Чтобы найти его, нам просто нужно продифференцировать (2)
куда обозначает дифференцирование по , сохраняя постоянный. Но тогда левая сторона читается
Приравнивая правые части (3а) и (3б), получаем
Это равенство должно выполняться для любого и любой . Таким образом, матрицы, действующие на в обеих частях уравнения должны быть равны, и мы получаем искомое дифференциальное уравнение,
Написав все это, я чувствую, что должен объяснить последний трюк в статье Хауэлла. Итак, у нас есть и мы хотим понять, что может немного изменить его. зависит от , такие разные по индуцирует изменение, пропорциональное производной: . Но также зависит от а также и эта зависимость дается выражением (2). Вторая строка матрицы, если быть точным, и вариация . Затем, если мы рассмотрим только небольшие вариации, мы можем просто суммировать эти два вклада и получить:
В интересующей вас проблеме, полупериод , а вариация происходит либо от небольшой вариации , для тех же начальных условий, или от небольшого изменения начальных условий, для того же полупериода.
Я надеюсь, что это принесет некоторое просветление, и я желаю вам всего наилучшего для вашего проекта!
Сначала я постараюсь ответить на ваши два вопроса просто. Если эти ответы слишком просты или не соответствуют действительности, дайте мне знать, и я отредактирую ответ.
1) Что такое вектор распространения состояния и матрица перехода состояния (STM)?
Вектор распространения состояния — это просто положение и скорость в данный момент времени.
STM представляет собой матрицу, которая фиксирует чувствительность распространения к начальному состоянию. Таким образом, он отвечает на вопрос: «Если я изменю свою начальную координату x на 5 метров, насколько изменится мое конечное положение и скорость?»
2) Как я могу использовать STM для улучшения конвергенции на новых гало-орбитах?
Вы можете использовать СТМ для достижения более быстрой сходимости на новых гало-орбитах, отображая необходимые изменения на пересечении оси Y обратно в начальное состояние. (Например, если вы доберетесь до перекрестка со скоростью +2 по оси Z, вы можете использовать СТМ для расчета другого начального состояния, в котором скорость по оси Z будет уменьшена примерно на 2. (с учетом ошибок линеаризации) Д-р Дэвис из CU Boulder ( CCAR) предоставляет следующий раздаточный материал в курсе для выпускников «Проектирование межпланетных миссий», который она преподает:
http://ccar.colorado.edu/imd/2015/documents/SingleShootingHandout.pdf
Кроме того, вот краткое изложение проекта по гало-орбитам, которое включает ряд полезных цифр: http://ccar.colorado.edu/asen5050/projects/projects_2012/dowling/introduction.html
odeevents
в Matlab) и вычислите разницу. Затем выполните математику, чтобы найти поправку, необходимую для начального состояния.
пользователь20022
ооо