Я стажер, который работает над числовым орбитальным пропагатором, разработанным в компании. Я не могу показать вам код, но могу сказать, что распространитель был разработан для работы в Simulink. Моя работа заключалась в том, чтобы извлечь распространитель, чтобы использовать его в качестве скрипта Matlab. Чтобы оценить работу моего скрипта, я сравниваю полученные результаты с результатами другого числового распространителя (GMAT). Начальные элементы орбиты взяты с орбиты SSO Repeat Ground Track. В настоящее время я рассматриваю помехи, вызванные только J2, и я использую интегратор типа Рунге-Кутта четвертого порядка. Анализы с двумя пропагаторами за период 52 дня с фиксированным размером шага 60 секунд имеют разные тренды, показанные на рисунке (слева показаны элементы орбиты, а справа показан вектор состояния).
Я не могу объяснить эту разницу, особенно в векторе состояния, из которого получаются орбитальные элементы. Сначала я подумал, что это связано с эталонными системами, поскольку данные GMAT находятся в ICRF, а данные моего пропагатора — в GCRS. Поэтому я использовал те же функции преобразования для данных GMAT, и при сравнении (этих новых результатов) с исходными не было ошибок, кроме тех, что связаны с числовыми. Так что я подумал, что ошиблась функция геопотенциала. Но даже в этом случае при прохождении одного и того же вектора состояния из GMAT ускорение, рассчитанное функцией, было таким же, как и предоставленное программой. Поэтому я думаю, что это может быть ошибка интегратора, так как есть периодический дрейф ошибки, показанный на следующем рисунке.
Однако Рунге-Кутта, по сравнению с тем, что я нашел в Интернете, кажется, настроен хорошо. Можете ли вы назвать причину, объясняющую эти расхождения?
Я добавляю больше графиков, чтобы показать вам тренд орбитальных элементов и вектора состояния за 24 часа. Со временем различия имеют тенденцию увеличиваться. В частности, мой пропагатор кажется ускоренным по сравнению с GMAT.
Вы должны проверить, какой распространитель использует GMAT. Метод RK4 с постоянным размером шага со временем будет отклоняться от истинного решения ОДУ, поэтому, если GMAT использует метод с адаптивным размером шага, который в некоторых точках изменяется от порядка миллисекунд до десятков секунд, скорее всего, это будет ближе к решению, чем RK4.
По сути, это то, что делает постоянный размер шага RK4: он выполняет несколько оценок производной между настоящим и следующим временным шагом, чтобы получить лучшую оценку того, как функция изменяется (в отличие, скажем, от метода Эйлера 1-го порядка). ). Затем он берет средневзвешенное значение этих оценок, чтобы определить, какую производную он будет использовать для выполнения этого шага. Как видно из графика, в некоторых точках он занижает площадь под кривой, а в других завышает, что со временем приведет к возникновению ошибки.
Вот уменьшенная версия (и временной шаг 500 секунд), чтобы показать эффект.
Поскольку вы используете 60 секунд, ошибка будет расти медленнее, но, тем не менее, со временем будет дрейфовать.
Адаптивный решатель размера шага изменит размер шага в зависимости от того, насколько быстро меняется производная (вторая производная):
Таким образом, если производная ближе к константе, это означает, что решение близко к линейному, поэтому решатель может делать большие шаги по времени. Но если производная меняется, решение нелинейно, решатель должен делать меньшие шаги по времени.
Наиболее распространенным из этих методов является RK4-5, который сравнивает решение методов RK4 и RK5 и в зависимости от того, насколько они различаются, соответствующим образом меняет временной шаг.
Таким образом, в целом с вашей моделью / реализацией RK4 может быть что-то не так, это может зависеть от того, какой распространитель GMAT использует, с которым вы сравниваете свое решение.
Также, если вам интересно, эти скриншоты взяты из видео, которое я сделал на решателях ODE:
+1
Глядя на первый график ОП и график различий, я первым делом заметил, что синий всегда «нечеткий» по сравнению с красным; отклонения ошибок внутри орбиты кажутся большими. Это, безусловно, согласуется с тем, что размер шага слишком велик для используемого метода; усредненные по любой полной орбите ошибки могут иметь тенденцию к устранению, но внутриорбитальные симметричные отклонения могут сделать его более шумным.Предыдущие ответы содержат некоторую полезную общую информацию, но я не нахожу ее очень полезной для вопроса.
Самая фундаментальная проверка работоспособности с помощью числового решателя: как изменится результат при изменении размера шага? Держите его как можно проще. Смоделируйте за один день и попробуйте разные размеры шагов. Мол, попробуйте шаг 6 секунд, 30 секунд, 200 секунд, 600 секунд. Чем они отличаются?
600 секунд наверное будут вести себя очень странно, а вот остальные - не знаю, надо попробовать. Если решение для h = 6 секунд по существу такое же, как ваше решение для h = 60 с, в частности, если оно постоянно имеет те же самые отклонения от GMAT, то у вас, очевидно, есть более фундаментальная проблема, не имеющая отношения к вообще интегратор. Это может быть много разного.
Только в том случае, если вы установили, что вы определенно настроили все так, как должно быть, вы должны сосредоточиться на том, чтобы получить максимальную отдачу от вашего численного решателя.
Ваш числовой интегратор РК4 не подходит для этой задачи. Порядок слишком низкий для требуемой точности. Это также фиксированный размер шага. Вы не провели исследование по этому вопросу. Скорость распространения ошибок для интеграторов RK с фиксированным шагом почти настолько плоха, насколько это возможно. Исследуйте интеграторы предикторов-корректоров высокого порядка... порядка 8 с (как минимум) 64-битными операциями с плавающей запятой (даже если они имеют фиксированный шаг).
Вы можете взглянуть на встроенные интеграторы RK, которые используют интегратор RK более низкого порядка в качестве предиктора в интеграторе RK более высокого порядка. Посмотрите на RK78 как на замену вашему RK4. В прошлом этот интегратор был рабочей лошадкой для орбитальных механиков. Это даст вам гораздо лучшее согласование данных и хорошую точность в течение более длительных интервалов времени.
Адамс-Моултон, или еще лучше, Адамс-Башфорт-Моултон, являются предикторами-корректорами, которые можно легко закодировать в любом порядке. Их скорость распространения ошибок меньше, чем у любого метода РК того же порядка. Интеграторы Гаусса-Радау также очень точны и хорошо подходят для интеграции орбитальной механики. Не кодируйте их сами. Скачать.
Существует множество методов предиктора-корректора с переменным шагом, которые обеспечат наилучшую точность и наименьшую скорость распространения ошибок в течение более длительных интервалов времени. С помощью этих методов ваши числовые интегрирования обеспечат наилучшую точность, которую вы можете ожидать... но они должны быть высокого порядка. Заказ 8 хорош.
Прежде чем приступить к проекту с любым интегратором, упомянутым здесь или где-либо еще, проверьте выбранный вами интегратор на решении задачи двух тел, выраженной в декартовых координатах. Это наихудший способ записи уравнений двух тел, и такая форма уравнений лучше всего нагрузит ваших интеграторов. Поскольку решение задачи двух тел имеет замкнутую форму в любой системе координат, вы увидите, как выбранные интеграторы справляются с распространением ошибок и точностью на коротких и длинных интервалах времени.
Ваш проект ни в коем случае не является тривиальным, и вам понадобится интегратор, который справится с этой задачей. Вы получите хорошее представление об интеграторе, который можно использовать для численного интегрирования задачи двух тел. Убедитесь, что ваши начальные условия дадут вам орбиту из двух тел с достаточно высоким эксцентриситетом: e >= 0,3. Не сходите с ума с очень высоким e (0,8). Интеграторы с фиксированным шагом быстро исчезнут с орбитами с большим эксцентриситетом (e = 0,8). Скорость их гибели обратно пропорциональна порядку интегратора.
Удачи.
ооо
оставленный вокруг
Откровенный
оставленный вокруг