Как числовой симулятор орбиты с n телами будет использовать иерархию в своем якобиане?

Этот вопрос касается методов расчета орбит.

В сообщении Github о динамической стабильности модифицированной системы Jool Principia (цитируется в этом ответе ) говорится:

Principia вычисляет траектории небесных тел путем интегрирования уравнений движения1; в результате, если система нестабильна, она может сломаться в игре. На самом деле это случай стандартной системы: в то время как особенности зависят от того, как кеплеровы орбитальные элементы KSP переводятся в декартово начальное состояние, с интерпретацией Principia как иерархических элементов Якоби , система Jool ломается в течение 19 дней при близком столкновении. между Валлом и Лейси.

Согласно Википедии :

В векторном исчислении матрица Якоби вектор-функции от нескольких переменных является матрицей всех ее частных производных первого порядка. Когда эта матрица является квадратной, то есть когда функция принимает в качестве входных данных то же количество переменных, что и количество векторных компонентов ее выходных данных, ее определитель называется определителем Якоби. И матрицу, и (если применимо) определитель часто называют в литературе просто якобианом.

Когда я выполняю численное интегрирование для проблем, с которыми я сейчас сталкиваюсь, я использовал старый scipy.integrate.odeint , но переключаюсь на scipy.integrate.solve_ivp , и последний говорит:

Параметры: fun callable: правая сторона системы. Подпись вызова — fun(t, y). Здесь t — скаляр, и есть два варианта для ndarray y: он может иметь форму (n,); тогда fun должен вернуть array_like с формой (n,). В качестве альтернативы он может иметь форму (n, k); тогда fun должен вернуть array_like формы (n, k), т. е. каждый столбец соответствует одному столбцу в y. Выбор между двумя вариантами определяется векторизованным аргументом (см. ниже). Векторизованная реализация позволяет более быструю аппроксимацию якобиана конечными разностями (требуется для жестких решателей) .

обновление: я думаю, что это может быть подсказкой; иерархическая система может быть полезна при оценке взаимодействий между объектами, которые меняются обратно пропорционально квадрату расстояния; вы можете захотеть оценить взаимодействие только тогда, когда вращающиеся тела проходят близко друг к другу.

Сам я никогда не использовал якобиан, но хотел бы понять это побольше.

В документе центральным вопросом является жесткость задачи при близком сближении.

Матрица, показанная в определении Википедии, выглядит плоской, а не иерархической:

Дж я Дж "=" ф я Икс Дж

или, как предлагает статья, куча транспонированных градиентов.

Вопрос: Что именно означает «интерпретация численного симулятора n тел как иерархических элементов Якоби»? Как можно использовать какую-то иерархию в якобиане, используемом решателем задач с n телами; этот или что-то похожее?

Будет ли это использоваться в случае роя или созвездия малых спутников Земли, гравитационное взаимодействие которых не учитывается, или тела должны каким-то образом взаимодействовать друг с другом (гравитационно или реактивно), прежде чем указанная иерархия будет иметь какую-либо пользу?

Я не знаю от якобианцев, но иерархия в симуляциях n тел с большим n используется для уменьшения сложности от наивного O (n ^ 2). Например, подсистема Джул и ее спутники могут быть смоделированы изолированно, а затем аппроксимированы как единое тело с точечной массой в остальной части системы Кербол; Кербол, все его планеты и их спутники можно было представить как единое тело на уровне моделирования местного звездного скопления и так далее.
@RussellBorogove Да, это может быть то, к чему он относится. Я перечитывал документацию scipy.integrate.solve_ivp, увидел слово «приблизительно», а затем одновременно добавил раздел обновления .
Я не знаком с симуляцией n-тел или KSP, но я неплохо знаю якобианцев (написал статью о более эффективном их вычислении). Я могу сказать так: я не знаю ни одного якобиана, который называется «иерархическим». Метод конечных разностей использует определение ф ( Икс ) "=" ( ф ( Икс + час ) ф ( Икс ) ) / час чтобы получить производную функции многих переменных. Может быть, есть метод вычислений, который допускает упорядоченные и параллельные вычисления для конечных разностей, но он не должен изменять результат как таковой. Обратите внимание, что конечное различие составляет половину точности вашего компьютера, см. документ конференции AAS 19-716.
@ChrisR спасибо за это, я понимаю, что вы имеете в виду. Я думаю, что мы с РБ изучаем возможность того, что иерархия может быть в определенном подмножестве вычисляемых элементов; можно потрудиться только над повышением точности для двух планет (в данном случае), находящихся на соседних орбитах или в непосредственной близости. Я не знаю, можно ли вычислить только некоторые элементы матрицы Якоби, а не другие, и при этом использовать их; возможно, какой-то умный алгоритм интеграции может это сделать.
Действительно, «иерархия» не является концепцией в числовых библиотеках Python (или других) для работы с якобианами. Вычисление якобиана либо по конечной разности (как отмечает @ChrisR), либо по явной функции (как определено путем символического дифференцирования и реализации) часто является вариантом, в зависимости от выбранного вами численного подхода. Есть компромиссы для любого подхода, в зависимости от проблемы.
@uhoh, с конечным различием было бы тривиально не вычислять определенные части якобиана, просто не изменяя эту часть вектора состояния. Для автоматического дифференцирования это также должно быть возможно путем установки нулевой части двойного числа для этого компонента. Наконец, для аналитической производной также можно игнорировать некоторые компоненты, хотя и сложно, если ваша библиотека использует векторную математику.

Ответы (1)

Я оставляю за собой право ошибаться в этом вопросе! Тем не менее, я добавляю это в ответ, а не в комментарий, потому что надеюсь, что это может стать трамплином для надежного ответа сообщества.

Я очень сомневаюсь, что текст, выделенный жирным шрифтом, относится к матрице Якоби (предположительно содержащей все парциальные части первого порядка всех системных переменных друг против друга). Скорее, учитывая, что они говорят, что преобразуют определение KSP того, где небесные тела находятся в эпоху (предоставленное в кеплеровских элементах), в декартову форму, я ожидаю, что они затем определят систему в иерархии координат Якоби, в которой положения координируются относительно барицентра системы из n тел для малых n. (В выделенном жирным шрифтом тексте авторы используют термин «элементы Якоби», с которым я раньше не сталкивался, но в других местах документации они используют более стандартные «координаты Якоби»)

Я не уверен, является ли эта иерархия жестко закодированной или назначается динамически, но в любом случае я подозреваю, что она используется в первую очередь для уменьшения ошибки с плавающей запятой в вычислениях положения между близкими объектами. В отличие от того, что предлагают некоторые комментарии, это не означает, что Principia аппроксимирует гравитацию n тел, позволяя взаимодействовать только ближайшим массам - опять же (я подозреваю), это исключительно метод для координации тел при смягчении ошибки с плавающей запятой в относительной позиции.

Для точного ответа я предлагаю связаться с одним из Леруа либо через Github, либо в этом разногласии , в котором происходит обсуждение разработки Principia (меня там больше нет, но яйцо всегда любезно отвечало на мои вопросы об их числовых значениях). методы). Пожалуйста, поделитесь с SE тем, что вы найдете!

О, я думаю, что это окажется правильным ответом, да. Я никогда не слышал о координатах Якоби, но после повторного прочтения « Декартово начальное состояние с интерпретацией Принципов как иерархических элементов Якоби» определенно кажется, что это именно то, о чем идет речь. Спасибо!