Метод Эйлера и потеря энергии

Самый простой интегратор и его роковой недостаток: он не сохраняет энергию.

Метод Эйлера — простейший интегратор: новое состояние получается прибавлением «скорость×dt» и «ускорение×dt», вычисленных в начале шага.

Как устроен явный Эйлер

Самый прямой способ сделать шаг во времени — взять текущие скорость и ускорение и сделать линейный прогноз:

x_new = x + v·dt          (координата по текущей скорости)
v_new = v + a·dt          (скорость по текущему ускорению)

Оба обновления используют величины в начале интервала. Это явный (forward) метод Эйлера. Он интуитивен, легко пишется и работает... короткое время. На длинных симуляциях он систематически портит результат, и портит характерным образом.

Эксперимент: энергия осциллятора во времени

Возьмём идеальный осциллятор (пружина без трения, x'' = -x). Его полная энергия E = ½v² + ½x² обязана быть строго постоянной. Проследим, что с ней делает Эйлер:

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}")
    xn = x + v*dt
    vn = v - x*dt
    x, v = xn, vn

Вывод:

шаг     E
   0   0.5000
  50   0.5665
 100   0.6418
 150   0.7272
 200   0.8238
 250   0.9334
 300   1.0575
 350   1.1981
 400   1.3574

Энергия не сохраняется — она монотонно растёт. За 400 шагов она почти утроилась. На фазовом портрете это означает, что вместо замкнутого эллипса осциллятор рисует раскручивающуюся спираль: амплитуда колебаний раздувается из ничего. Симуляция «придумывает» энергию, которой в физике нет.

Почему так происходит

Причина геометрическая. На каждом шаге Эйлер идёт по касательной к истинной траектории. У вогнутой кривой касательная всегда лежит снаружи, поэтому Эйлер систематически «срезает наружу» — точка отходит от центра. Для осциллятора это означает накачку энергии, для орбиты — раскрутку планеты по спирали прочь от Солнца. Ошибка не случайна, а имеет знак: она всегда в одну сторону, поэтому копится, а не усредняется в ноль.

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

Формально Эйлер удерживает только первый член ряда Тейлора. Локальная ошибка одного шага мала (порядка dt²), но за N шагов накапливается до dt — это метод первого порядка. Хуже того, для колебательных систем ошибка не просто велика, а несимплектична: она нарушает геометрическую структуру фазового пространства, отвечающую за сохранение энергии. Никакое разумное уменьшение dt эту болезнь не лечит полностью — лечит смена метода.

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

  • Считать Эйлер «достаточно хорошим» для долгих симуляций. Для орбит и колебаний на тысячи шагов он непригоден.
  • Лечить дрейф только уменьшением dt. Это лишь замедляет накачку, но не убирает её; правильное решение — симплектический метод.
  • Не проверять энергию. Без этого теста раскрутку спирали легко принять за «настоящую» физику.

Итоги

  • Явный Эйлер использует скорость и ускорение в начале шага.
  • Он систематически добавляет энергию: эллипс превращается в спираль.
  • Ошибка имеет постоянный знак и накапливается, а не усредняется.
  • Уменьшение dt не лечит болезнь — нужен другой метод.
Проверьте себя
1. Что происходит с энергией идеального осциллятора при явном методе Эйлера?
AСохраняется точно
BМонотонно растёт — система «накачивается» энергией
CМонотонно убывает к нулю
DСлучайно колеблется
2. Почему ошибка Эйлера накапливается, а не усредняется?
AОна случайна
BОна имеет постоянный знак — всегда в одну сторону
CИз-за округления
DИз-за слишком малого dt
3. Чем правильно лечить энергетический дрейф Эйлера?
AТолько уменьшением dt
BСменой метода на симплектический (полунеявный Эйлер, Верле)
CУвеличением dt
DОкруглением до целых