Симплектичність Leapfrog: доведення — і чому це обмежує похибку енергії назавжди
Слово «симплектичний» часто вживають у статтях про фізичні рушії, рідко доводячи. Тут ми покроково виводимо, чому відображення Leapfrog / Штормера-Верле точно зберігає симплектичну 2-форму (величину, яка вимірює орієнтовану площу у фазовому просторі і не змінюється при точній гамільтоновій динаміці) — і що це дає: жодного систематичного дрейфу енергії, навіть через мільярд кроків.
1. Що означає «симплектичний»
Гамільтонова система еволюціонує у фазовому просторі
(q, p) (координати, імпульси). Симплектична форма
— це білінійна антисиметрична 2-форма ω = dq ∧ dp,
яка вимірює орієнтовану площу в фазовому просторі. Потік
φₜ точних рівнянь Гамільтона зберігає цю форму
точно: φₜ* ω = ω для будь-якого t.
Тут J = ∂(q', p')/∂(q, p) — якобіан відображення
одного кроку в фазовому просторі. Це узагальнення умови
det J = 1 (збереження об'єму, теорема Ліувілля) —
симплектичність строгіша: вона зберігає орієнтовану площу
для кожної 2-площини, не лише повний об'єм.
Симплектичні інтегратори точно розв'язують «збурений гамільтоніан» H̃ = H + O(dtᵏ), близький до справжнього H. Тому похибка енергії обмежена й коливається навколо нуля, а не накопичується систематично, як в несимплектичних методах (Euler, RK4).
2. Leapfrog як композиція відображень
Розкладемо Leapfrog (DKD-форма) на три елементарні відображення фазового простору:
Φ_K(h): p → p + F(q)·h, q незмінне
Φ_D(h/2): q → q + p·(h/2)/m, p незмінне
Leapfrog = Φ_D(h/2) ∘ Φ_K(h) ∘ Φ_D(h/2)
Ключова ідея доведення: кожне з трьох відображень окремо симплектичне, а композиція симплектичних відображень завжди симплектична (це випливає з ланцюгового правила для якобіанів: J_composite = J₁·J₂·J₃, і якщо кожне Jᵢᵀ·Ω·Jᵢ = Ω, то й добуток задовольняє те саме).
3. Обчислення якобіана Drift та Kick
Розглянемо 1D-систему (q, p) для простоти; узагальнення на багато вимірів — покомпонентне. Якобіан Drift-кроку:
Якобіан Kick-кроку (де сила F(q) залежить лише від позиції — типово для консервативних потенціалів):
Обидві матриці мають детермінант точно 1 — необхідна (але не достатня) умова симплектичності в 1D.
4. Доведення: кожне відображення зберігає ω
У 1D симплектична умова спрощується до
det(J) = 1 (в одновимірному фазовому просторі 2×2
симплектична форма — це просто орієнтована площа). Перевіримо
для Drift:
Аналогічно для Kick:
Оскільки детермінант добутку матриць дорівнює добутку детермінантів:
Це доводить, що кожен крок Leapfrog зберігає орієнтовану площу фазового простору точно — незалежно від dt, від нелінійності сили F(q), і без жодного наближення. На відміну від Euler чи RK4, тут немає похибки, яка накопичується — умова виконується рівно, аналітично.
У багатовимірному фазовому просторі (N частинок, 6N вимірів) аргумент той самий, лише детермінант замінюється повною симплектичною умовою Jᵀ·Ω·J = Ω на блочно-діагональних матрицях J_D, J_K. Кожен блок — це та сама 2×2 структура для кожної координати, тому доведення масштабується без змін.
5. Аналіз зворотної похибки
Найглибший результат теорії симплектичних інтеграторів
(Hairer, Lubich, Wanner) — backward error
analysis: симплектичний метод точно розв'язує
«збурений» гамільтоніан H̃ = H + h²·H₂ + h⁴·H₄ + …
для деякої обчислюваної H₂, H₄, … Оскільки H̃ — це справжня
консервативна система (сама симплектична), її енергія
зберігається точно.
«Назавжди» — це трохи перебільшення: похибка обмежена лише на експоненційно довгому проміжку часу (за теоремою KAM/backward-error), але для практичних симуляцій (мільйони — мільярди кроків N-тіл) це фактично невідрізнено від «завжди».
6. Чому RK4 не є симплектичним
RK4 обчислює зважене середнє чотирьох оцінок похідної в різних точках — це відображення фазового простору не факторизується у послідовність канонічних (симплектичних) перетворень. Якобіан RK4-кроку не задовольняє Jᵀ·Ω·J = Ω за жодного вибору dt (окрім тривіального dt → 0). Це можна перевірити прямим обчисленням якобіана для простого гармонічного осцилятора — det(J_RK4) ≠ 1 при скінченному h.
Симулюйте орбіту Кеплера з RK4 на мільйон кроків — енергія систематично «повзе» в один бік (найчастіше зростає), орбіта поступово розкручується назовні. З Leapfrog енергія коливається в межах O(h²) навколо істинного значення без систематичного дрейфу.
7. Порівняння наслідків
| Властивість | Leapfrog | RK4 |
|---|---|---|
| det(J) за крок | Точно 1 | ≠ 1 при скінченному h |
| Похибка енергії з часом | Обмежені коливання | Систематичний дрейф |
| Порядок точності | O(h²) | O(h⁴) |
| Обчислень сили/крок | 1 | 4 |
| Найкраще для | Довгі N-тіл, MD | Короткі, високоточні траєкторії |
8. Псевдокод
Чисельна перевірка det(J) (JS)
// Чисельна перевірка det(J) = 1 для одного кроку Leapfrog
// на простому гармонічному осциляторі F(q) = −k·q
function leapfrogJacobianDeterminant(k, m, h) {
// Drift: q' = q + p*(h/2)/m, p' = p
const Jd = [[1, h / (2 * m)], [0, 1]];
// Kick: p' = p + F(q)*h = p − k*q*h, q' = q → F'(q) = −k
const Jk = [[1, 0], [−k * h, 1]];
matMul2 = (A, B) => [
[A[0][0]*B[0][0] + A[0][1]*B[1][0], A[0][0]*B[0][1] + A[0][1]*B[1][1]],
[A[1][0]*B[0][0] + A[1][1]*B[1][0], A[1][0]*B[0][1] + A[1][1]*B[1][1]]
];
const J = matMul2(matMul2(Jd, Jk), Jd);
const det = J[0][0]*J[1][1] − J[0][1]*J[1][0];
return det; // завжди точно 1, для будь-яких k, m, h
}
Побачити довгострокову стабільність у дії
Симуляція N-тіл цього проєкту використовує Leapfrog саме заради цієї властивості — орбіти залишаються стабільними навіть після десятків тисяч кроків.
⭐ N-тіла 🔵 Молекулярна динаміка