Дозвольте почати з виправлень. Ні, odeint
немає симплектичних інтеграторів. Ні, симплектична інтеграція не означає збереження енергії.
Що означає симплектик і коли його слід використовувати?
Перш за все, що означає симплектика? Симплектичний означає, що рішення існує на симплектичному колекторі. Симплектичний колектор - це набір рішень, який визначається 2-формою. Подробиці симплектичних многообразий, ймовірно, звучать як математична нісенітниця, тому замість суті його існує пряме відношення між двома наборами змінних на такому багатоманітнику. Причина, чому це важливо для фізики, полягає в тому, що рівняння Гамільтоніана природно мають, що розчини знаходяться на симплектичному колекторі у фазовому просторі, при цьому природне розщеплення є складовими позиції та імпульсу. Для справжнього гамільтонового рішення цей фазовий простір є постійною енергією.
O (Δ tн)н з істинної траєкторії. Потім виникає лінійний дрейф через чисельну похибку цієї траєкторії в часі. Звичайні інтегратори, як правило, мають квадратичний (або більше) дрейф, і не мають жодних хороших глобальних гарантій щодо цього фазового просторового шляху (просто локального).
Це, як правило, означає, що симплектичні інтегратори, як правило, фіксують давні шаблони краще, ніж звичайні інтегратори, через цю відсутність дрейфу та цю майже гарантію періодичності. Цей ноутбук добре відображає ці властивості щодо проблеми Kepler . Перше зображення показує, про що я говорю з періодичним характером рішення.
Це було вирішено за допомогою симплектичного інтегратора 6-го порядку від Kahan та Li з DifferentialEquations.jl . Видно, що енергія не є точно збереженою, але її зміна залежить від того, наскільки віддалений збурений колектор розв'язку від справжнього колектора. Але оскільки числове рішення саме по собі розташоване на симплектичному колекторі, воно, як правило, майже точно періодичне (з деяким лінійним числовим дрейфом, який ви можете бачити), що робить це дуже добре для довгострокової інтеграції. Якщо ви зробите те саме з RK4, ви можете отримати катастрофу:
Видно, що проблема полягає в тому, що в числовому рішенні немає справжньої періодичності, і тому понаднормовий процес має тенденцію до дрейфу.
Це підкреслює справжню причину вибору симплектичних інтеграторів: симплектичні інтегратори добре підходять для тривалих інтеграцій щодо проблем, що мають симплектичну властивість (Гамільтонові системи) . Тож давайте пройдемося через кілька речей. Зауважте, що вам не завжди потрібні симплектичні інтегратори навіть із симплектичною проблемою. У цьому випадку адаптивний метод Runge-Kutta 5-го порядку може зробити непоганий. Ось Tsit5
:
Зауважте дві речі. По-перше, він отримує досить хорошу точність, що ви не можете побачити фактичний дрейф у графіці фазового простору. Однак з правого боку ви бачите, що є цей дрейф енергії, і тому, якщо ви робите досить довгу інтеграцію, цей метод не буде робити так само, як метод рішення з періодичними властивостями. Але це викликає питання, як це оцінює ефективність порівняно з просто інтегруванням надзвичайно точно? Ну, це трохи менш певно. У DiffEqBenchmarks.jl ви можете знайти деякі орієнтири, які досліджують це питання. Наприклад, цей зошитрозглядає енергетичну помилку проти часу виконання в системі рівнянь Гамільтонова з чотириразової моделі Босона і показує, що якщо ви хочете по-справжньому високої точності, то навіть для досить тривалих часів інтеграції ефективніше просто використовувати RK високого порядку або Runge-Kutta Nystrom ( RKN) метод. Це має сенс, тому що для задоволення симплектичної властивості інтегратори відмовляються від певної ефективності, і в значній мірі доводиться фіксувати крок часу (є деякі дослідження, які просуваються до останнього, але це не дуже далеко).
Окрім того, зауважте від обох цих зошитів, що ви також можете просто взяти стандартний метод і спроектувати його назад у колектор рішення кожного кроку (або кожні кілька кроків). Саме так роблять приклади, що використовують зворотний виклик DifferentialEquations.jl ManifoldProjection . Ви бачите, що закони про збереження гарантій підтримуються, але із додатковими витратами на вирішення неявної системи кожен крок. Ви також можете використовувати повністю неявні вирішувачі ODE або матриці сингулярних мас для додавання рівнянь збереження, але кінцевим результатом є те, що ці методи є більш обчислювально-затратними як компроміс.
Отже, підсумовуючи, клас проблем, за якими потрібно досягти симплектичного інтегратора, - це такі проблеми, які мають рішення на симплектичному колекторі (Гамільтонові системи), куди ви не хочете вкладати обчислювальні ресурси, щоб мати дуже точну (толерантність <1e-12
) рішення та не потребує точної енергії / тощо. збереження. Це підкреслює, що мова йде про властивості довготривалої інтеграції, тому не слід просто стикатися з усіма ними вольно-неволі, як це пропонує деякі літератури. Але вони все ще є дуже важливим інструментом у багатьох сферах на зразок астрофізики, де у вас є тривалий час інтеграції, які потрібно вирішувати досить швидко, не маючи абсурдної точності.
Де я можу знайти симплектичні інтегратори? Які існують симплектичні інтегратори?
Зазвичай існує два класи симплектичних інтеграторів. Існують симплектичні інтегратори Runge-Kutta (це ті, що показані у наведених вище прикладах), і є неявні методи Runge-Kutta, які мають симплектичну властивість. Як згадує @origimbo, симплектичні інтегратори Runge-Kutta вимагають надати їм розподілену структуру, щоб вони могли окремо обробляти положення та імпульси. Однак, всупереч коментарю, неявні методи Runge-Kutta є симплектичними, не вимагаючи цього, а натомість потребують вирішення нелінійної системи. Це не так вже й погано, тому що якщо система не є жорсткою, цю нелінійну систему можна вирішити за допомогою функціональної ітерації або прискорення Андерсона, але симплектичні методи RK все ж, мабуть, віддадуть перевагу ефективності (вона '
Зважаючи на це , odeint не має методів жодної з цих сімей , тому це не гарний вибір, якщо ви шукаєте симплектичних інтеграторів. У місті Фортран на сайті Хайрера є невеликий набір, який ви можете використовувати . Математика має кілька вбудованих . Розв'язувачі ODE GSL мають неявні точкові інтегратори RK Гаусса, які IIRC є симплектичними, але це лише єдина причина використовувати методи GSL.
Але найбільш повний набір симплектичних інтеграторів можна знайти в DifferentialEquations.jl в Джулії (нагадаємо, це було використано для зошитів вище). Перелік доступних симплектичних методів Рунге-Кутти знаходиться на цій сторінці, і ви помітите, що неявний метод середини також є симплектичним (неявний метод Рупе-Кутта-Трапеція вважається "майже симплектичним", оскільки він оборотний). Він не тільки має найбільший набір методів, але і є відкритим кодом (ви можете побачити код та його тести мовою високого рівня) та має безліч орієнтирів . Хороший вступний зошит для його використання для вирішення фізичних проблем - це зошит з підручниками. Але, звичайно, рекомендується почати з пакетом через перший підручник з ODE .
Загалом ви можете знайти детальний аналіз числових диференціальних рівнянь рівнянь у цій публікації в блозі . Це досить детально, але оскільки він повинен охоплювати безліч тем, він робить кожну менш детально, ніж це, тому не соромтеся просити його будь-яким чином розширити.