Полунеявный (симплектический) Эйлер

Одна перестановка строк — и интегратор перестаёт терять энергию.

Полунеявный (симплектический) метод Эйлера отличается от обычного порядком обновлений: сначала по ускорению меняется скорость, и уже новая скорость двигает координату.

Магия порядка строк

В явном Эйлере мы обновляли координату по старой скорости. Полунеявный делает наоборот: сначала обновляет скорость, потом двигает координату новой скоростью:

явный Эйлер:        полунеявный Эйлер:
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. Перестановка двух строк превратила негодный метод в пригодный.

Что значит «симплектичность»

Симплектический метод сохраняет не саму энергию точно, а близкую к ней величину (так называемый теневой гамильтониан) — навсегда. Поэтому реальная энергия не дрейфует, а лишь слегка осциллирует вокруг истинного значения, и эти колебания не растут со временем. Именно это нужно для долгих симуляций: орбита планеты, рассчитанная симплектическим методом, останется орбитой и через миллион оборотов, а не улетит по спирали.

Как работает под капотом

Геометрически симплектичность означает сохранение «площади» в фазовом пространстве при шаге. Явный Эйлер площадь раздувает (отсюда накачка), неявный — сжимает (затухание), а полунеявный — сохраняет. Эта структура напрямую связана с законами сохранения через теорему Лиувилля. Поэтому в небесной механике и молекулярной динамике используют исключительно симплектические интеграторы — они «честны» по отношению к энергии.

Частые ошибки

  • Перепутать порядок обратно. Если случайно обновить координату до скорости — снова получите явный Эйлер и дрейф энергии.
  • Ждать точного сохранения энергии. Симплектический метод держит энергию ограниченной, но она слегка осциллирует — это нормально.
  • Применять к диссипативным системам без понимания. Если в системе есть трение, энергия и должна убывать; симплектичность важна именно для консервативных систем.

Итоги

  • Полунеявный Эйлер сначала обновляет скорость, затем координату.
  • Перестановка двух строк делает метод симплектическим.
  • Энергия не дрейфует, а ограниченно колеблется вокруг истинной.
  • Симплектические методы незаменимы для долгих консервативных симуляций.
Проверьте себя
1. Чем полунеявный Эйлер отличается от явного?
AИспользует меньший шаг
BСначала обновляет скорость, и уже новая скорость двигает координату
CСчитает ускорение дважды
DИспользует другой язык программирования
2. Что происходит с энергией при полунеявном Эйлере на осцилляторе?
AМонотонно растёт
BКолеблется вокруг истинного значения, не дрейфуя
CУходит в ноль
DУдваивается каждые 100 шагов
3. Что сохраняет симплектический метод в фазовом пространстве?
AЧисло частиц
BПлощадь (структуру фазового пространства), что и обеспечивает отсутствие дрейфа энергии
CСкорость счёта
DЗнак координаты