Что означает «симплектический» применительно к числовым интеграторам, и использует ли их SciPy их принцип?


25

В этом комментарии я написал:

... интегратор SciPy по умолчанию, который, как я предполагаю, использует только симплектические методы.

в котором я ссылаюсь на SciPy's odeint, который использует либо «нежесткий (Адамс) метод», либо «жесткий (BDF) метод». По словам источника :

def odeint(func, y0, t, args=(), Dfun=None, col_deriv=0, full_output=0,
           ml=None, mu=None, rtol=None, atol=None, tcrit=None, h0=0.0,
           hmax=0.0, hmin=0.0, ixpr=0, mxstep=0, mxhnil=0, mxordn=12,
           mxords=5, printmessg=0):
    """
    Integrate a system of ordinary differential equations.

    Solve a system of ordinary differential equations using lsoda from the
    FORTRAN library odepack.

    Solves the initial value problem for stiff or non-stiff systems
    of first order ode-s::
        dy/dt = func(y, t0, ...)
    where y can be a vector.
    """

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

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

Можно ли объяснить, что это за свойство (которое делает симплектический интегратор симплектическим) простым и (довольно) простым для понимания, но не неточным способом? Я спрашиваю с точки зрения того, как интегратор функционирует внутри , а не как он работает в тестировании.

И верно odeintли мое подозрение, что используются только симплектические интеграторы?


4
В качестве строгого эмпирического правила вы должны только надеяться, что интегратор черного ящика будет симплектическим, если вам потребуется разделить уравнения положения и импульса.
origimbo

@origimbo Спасибо. Это действительно так, и, похоже, odeintэто оболочка Python для довольно старых, устоявшихся и хорошо ссылающихся исходных кодов (отредактированный вопрос, ссылки на ODEPACK и LSODA), хотя я, конечно, признаю, что использовал его в режиме черного ящика. Мой связанный пример показывает, что вектор состояния 6D состоит из трех положений и трех скоростей.
Ух

11
Интеграторы ODE в ODEPACK и LSODA не являются симплектическими интеграторами.
Брайан Борчерз

2
Вот рабочий пример, сравнивающий два очень простых решателя: Эйлера и Симплектического Эйлера: idontgetoutmuch.wordpress.com/2013/08/06/… .
idontgetoutmuch

2
Книга Hairer, Nørsett и Wanner дает хорошее объяснение симплектических методов. Посмотрите на рисунок 16.1, в частности, и рисунки здесь .
JM

Ответы:


47

Позвольте мне начать с исправлений. Нет, odeintне имеет никаких симплектических интеграторов. Нет, симплектическая интеграция не означает сохранение энергии.

Что означает симплектическое и когда вы должны его использовать?

Прежде всего, что означает симплектика? Симплектика означает, что решение существует на симплектическом многообразии. Симплектическое многообразие - это множество решений, которое определяется 2-формой. Детали симплектических многообразий, вероятно, звучат как математическая бессмыслица, поэтому вместо этого суть в том, что существует прямая связь между двумя наборами переменных на таком многообразии. Причина, по которой это важно для физики, состоит в том, что уравнения Гамильтониана, естественно, имеют решения о том, что решения находятся на симплектическом многообразии в фазовом пространстве, причем естественное расщепление является компонентом положения и импульса. Для истинного гамильтонова решения этот путь в фазовом пространстве является постоянной энергией.

О(ΔTN)N

Это означает, что симплектические интеграторы, как правило, улавливают долговременные шаблоны лучше, чем обычные интеграторы, из-за отсутствия дрейфа и почти гарантии периодичности. Этот блокнот хорошо отображает эти свойства в задаче Кеплера . Первое изображение показывает, о чем я говорю, с периодическим характером решения.

введите описание изображения здесь

Это было решено с помощью симплектического интегратора 6-го порядка от Kahan и Li из DifferentialEquations.jl . Вы можете видеть, что энергия не совсем консервативна, но ее изменение зависит от того, насколько далеко возмущенное многообразие решений находится от истинного многообразия. Но так как само численное решение находится на симплектическом многообразии, оно имеет тенденцию быть почти точно периодическим (с некоторым линейным смещением чисел, которое вы можете видеть), что делает его очень хорошим для долгосрочной интеграции. Если вы сделаете то же самое с RK4, вы можете получить катастрофу:

введите описание изображения здесь

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

Это подчеркивает истинную причину выбора симплектических интеграторов: симплектические интеграторы хороши для длительных интегрирований в задачах, обладающих симплектическим свойством (гамильтоновы системы) . Итак, давайте пройдемся по нескольким вещам. Обратите внимание, что вам не всегда нужны симплектические интеграторы даже для симплектической задачи. В этом случае может подойти адаптивный метод Рунге-Кутты 5-го порядка. Вот Tsit5:

введите описание изображения здесь

Обратите внимание на две вещи. Во-первых, он получает достаточно хорошую точность, чтобы вы не могли видеть фактический дрейф на графике фазового пространства. Тем не менее, с правой стороны вы можете видеть, что существует этот дрейф энергии, и поэтому, если вы делаете достаточно долгую интеграцию, этот метод не будет так же хорош, как метод решения с периодическими свойствами. Но это поднимает вопрос, как это происходит с точки зрения эффективности по сравнению с простой интеграцией? Ну, это немного менее уверенно. В DiffEqBenchmarks.jl вы можете найти несколько тестов, исследующих этот вопрос. Например, этот ноутбуканализирует погрешность энергии в сравнении с временем выполнения в системе гамильтоновых уравнений из четырехкратной модели Бозона и показывает, что если вам нужна действительно высокая точность, то даже при достаточно длительных временах интегрирования эффективнее использовать RK или Runge-Kutta Nystrom высокого порядка ( РКН) метод. Это имеет смысл, потому что для удовлетворения симплектического свойства интеграторы отказываются от некоторой эффективности и в значительной степени должны быть с фиксированным временным шагом (есть некоторые исследования, продвигающиеся к последнему, но это не очень далеко).

Кроме того, обратите внимание на оба этих ноутбука, что вы также можете просто взять стандартный метод и проецировать его обратно во множество решений на каждом этапе (или каждые несколько шагов). Это то, что делают примеры, использующие обратный вызов ManifoldProjection DifferentialEquations.jl . Вы видите, что гарантии законов сохранения соблюдаются, но с дополнительными затратами на решение неявной системы на каждом этапе. Вы также можете использовать полностью неявный решатель ODE или матрицы особой массы, чтобы добавить уравнения сохранения, но конечный результат состоит в том, что эти методы более затратны в вычислительном отношении в качестве компромисса.

Подводя итог, можно сказать, что класс проблем, к которым вы хотите обратиться за симплектическим интегратором, это те, которые имеют решение на симплектическом многообразии (гамильтоновы системы), где вы не хотите вкладывать вычислительные ресурсы в очень точные (допуски <1e-12) решение и не нуждаются в точной энергии / и т.д. сохранение. Это подчеркивает, что это все о долгосрочных интеграционных свойствах, так что вы не должны просто стучаться к ним всем волей-неволей, как предполагает некоторая литература. Но они все еще являются очень важным инструментом во многих областях, таких как астрофизика, где у вас есть длительные интегрирования, которые вам нужно решать достаточно быстро, не имея при этом абсурдной точности.

Где я могу найти симплектические интеграторы? Какие существуют симплектические интеграторы?

Обычно существует два класса симплектических интеграторов. Существуют симплектические интеграторы Рунге-Кутты (которые показаны в приведенных выше примерах), и существуют неявные методы Рунге-Кутты, которые обладают симплектическим свойством. Как упоминает @origimbo, симплектические интеграторы Рунге-Кутты требуют, чтобы вы предоставили им секционированную структуру, чтобы они могли обрабатывать части положения и импульса отдельно. Однако, вопреки комментарию, неявные методы Рунге-Кутты являются симплектическими, не требуя этого, а вместо этого требуют решения нелинейной системы. Это не так уж плохо, потому что, если система не является жесткой, эта нелинейная система может быть решена с помощью функциональной итерации или ускорения Андерсона, но симплектические методы РК все еще, вероятно, предпочтительнее для эффективности (это '

Тем не менее, odeint не имеет методов ни из одного из этих семейств , поэтому он не является хорошим выбором, если вы ищете симплектических интеграторов. В Fortran сайт Hairer имеет небольшой набор, который вы можете использовать . Mathematica имеет несколько встроенных . Решатели GSL ODE имеют неявные точечные интеграторы RK-Гаусса, которые IIRC являются симплектическими, но это единственная причина для использования методов GSL.

Но наиболее полный набор симплектических интеграторов можно найти в DifferentialEquations.jl в Julia (напомним, это использовалось для записных книжек выше). Список доступных симплектических методов Рунге-Кутты находится на этой странице, и вы заметите, что неявный метод средней точки также симплектичен (неявный метод Рунге-Кутты-трапеции считается «почти симплектическим», потому что он обратим). Он не только обладает самым большим набором методов, но и с открытым исходным кодом (вы можете увидеть код и его тесты на языке высокого уровня) и имеет множество тестов . Хорошим вводным блокнотом для его использования для решения физических проблем является этот учебник, Но, конечно, рекомендуется начать работу с пакетом через первое руководство по ODE .

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


10
С этим ответом я, кажется, выиграл джекпот Stack Exchange! Это идеальный ответ для меня, так как я сразу понимаю некоторые из них, и те части, которые я не оставляю, мне хочется читать дальше. Я действительно ценю время, которое вы потратили на тщательный поиск ответа, а также на другие полезные и поучительные ссылки.
Ух

Прежде чем углубляться в математические детали, мы могли бы примерно сказать, что симплектическое означает сохранение объема , не так ли?
Мигель

2
FTR, причина, по которой адаптивный Runge-Kutta 5-го порядка работает намного лучше, чем RK4, заключается не в том, что он имеет более высокий порядок, а в том, что он выбирает более подходящие размеры шагов. Причина, по которой RK4 работает так плохо, в основном в том, что размер шага в перигее неоправданно велик; тот же решатель с половиной размера шага дал бы намного лучшее решение. (Просто, было бы потрачено много времени на
точное

1
отличная экспозиция. В качестве побочного вопроса: OP начинается со ссылки на Python - есть ли рекомендуемые уроки / пакеты по Python в соответствии с примерами, связанными с Julia?
Кецалькоатль

1
Единственный пакет Python, который я знаю для таких интеграторов, - это difqpy , где он не документирован в README, но вы можете получить доступ ко всем тем же методам и переписать его в Python, используя этот пакет.
Крис Ракауцкас

14

пQЧАС(п,Q)

dQdTзнак равно+ЧАСп
dпdTзнак равно-ЧАСQ,
ЧАС
п(T),Q(T)знак равноφT(п(T0),Q(T0))
dпdQпQодномерные, вы можете думать об этом как о том, что область внутри замкнутых кривых на фазовом пространстве сохраняется. Это обеспечивает все виды хороших свойств устойчивости, поскольку «шарики» траекторий должны оставаться «близко» друг к другу.

С точки зрения чисел, симплектический интегратор действует таким же образом, также сохраняя эту область / две формы. В свою очередь, это означает, что существует консервативный «числовой гамильтониан» (который может не совпадать с [читай «не является»], чем точный). Обратите внимание, что стабильность - это не то же самое, что точность, поэтому большинство преимуществ симплектических методов проявляются при интеграции в течение очень длительного времени (например, ваш метод может быстро разместить спутник на неправильной стороне Земли, не позволяя ему распадаться на Это).


Спасибо тебе за это! Теперь я буду использовать слова выше моей зарплаты. n-шарики траекторий подвергаются большему риску, когда находятся вблизи бифуркаций, таких как симуляции в трех телах. ср Doedel et al. 2007, инт. J. Бифуркации и хаоса, т. 17, нет. 8 (2007) 2625–2677 Как я это сделал? Также ieec.cat/hosted/web-libpoint/papers/…
Ух

2
Если читатель не осведомлен о математических деталях, упоминание об устойчивости вводит в заблуждение, поскольку сохранение объема не означает, что отдельные траектории остаются близкими.
Мигель

1
@Miguel Я думаю, что это одна из тех ситуаций, когда читатель, который не следит за математическими подробностями, в любом случае не имеет смысла, но с точки зрения обычной числовой тройки точности, стабильности и вычислительной эффективности, я бы сказал, что подчеркивая стабильность польза полезна. Я рад принять предложения для переписывания, если вы можете придумать что-то лучшее, что не является преднамеренно неточным.
origimbo

22

1
@ Мигель: Но сгусток частиц может быть разделен на две или более частей. Его общий объем просто должен оставаться постоянным.
Вольфганг Бангерт
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.