Полунеявный (симплектический) Эйлер
Одна перестановка строк — и интегратор перестаёт терять энергию.
Полунеявный (симплектический) метод Эйлера отличается от обычного порядком обновлений: сначала по ускорению меняется скорость, и уже новая скорость двигает координату.
Магия порядка строк
В явном Эйлере мы обновляли координату по старой скорости. Полунеявный делает наоборот: сначала обновляет скорость, потом двигает координату новой скоростью:
явный Эйлер: полунеявный Эйлер: x_new = x + v·dt v_new = v + a·dt (сначала скорость!) v_new = v + a·dt x_new = x + v_new·dt (координата по новой v)
Кажется ерундой — поменяли две строки местами. Но результат принципиально иной: полунеявный Эйлер симплектичен, то есть сохраняет геометрическую структуру фазового пространства, а значит энергию (в среднем). Это один из самых поразительных фактов вычислительной физики: качество метода зависит не от сложности, а от порядка двух операций.
Эксперимент: та же энергия, другой результат
Прогоним тот же осциллятор тем же шагом, но в полунеявном порядке:
x, v, dt = 1.0, 0.0, 0.05
print("шаг E")
for step in range(0, 401):
if step % 50 == 0:
E = 0.5*v*v + 0.5*x*x
print(f"{step:4d} {E:7.4f}")
v = v - x*dt # сначала скорость
x = x + v*dt # затем координата по новой vВывод:
шаг E 0 0.5000 50 0.5122 100 0.5074 150 0.4924 200 0.4888 250 0.5016 300 0.5126 350 0.5060 400 0.4912
Энергия не растёт — она колеблется вокруг 0.5, не уходя ни вверх, ни вниз. На фазовом портрете осциллятор рисует почти замкнутый эллипс (чуть искажённый, но не раскручивающийся). Сравните с явным Эйлером, у которого за те же 400 шагов энергия добралась до 1.36. Перестановка двух строк превратила негодный метод в пригодный.
Что значит «симплектичность»
Симплектический метод сохраняет не саму энергию точно, а близкую к ней величину (так называемый теневой гамильтониан) — навсегда. Поэтому реальная энергия не дрейфует, а лишь слегка осциллирует вокруг истинного значения, и эти колебания не растут со временем. Именно это нужно для долгих симуляций: орбита планеты, рассчитанная симплектическим методом, останется орбитой и через миллион оборотов, а не улетит по спирали.
Как работает под капотом
Геометрически симплектичность означает сохранение «площади» в фазовом пространстве при шаге. Явный Эйлер площадь раздувает (отсюда накачка), неявный — сжимает (затухание), а полунеявный — сохраняет. Эта структура напрямую связана с законами сохранения через теорему Лиувилля. Поэтому в небесной механике и молекулярной динамике используют исключительно симплектические интеграторы — они «честны» по отношению к энергии.
Частые ошибки
- Перепутать порядок обратно. Если случайно обновить координату до скорости — снова получите явный Эйлер и дрейф энергии.
- Ждать точного сохранения энергии. Симплектический метод держит энергию ограниченной, но она слегка осциллирует — это нормально.
- Применять к диссипативным системам без понимания. Если в системе есть трение, энергия и должна убывать; симплектичность важна именно для консервативных систем.
Итоги
- Полунеявный Эйлер сначала обновляет скорость, затем координату.
- Перестановка двух строк делает метод симплектическим.
- Энергия не дрейфует, а ограниченно колеблется вокруг истинной.
- Симплектические методы незаменимы для долгих консервативных симуляций.