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

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

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

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

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

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

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

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

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

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^2$), но за $N$ шагов накапливается до $dt$ — это метод первого порядка. Хуже того, для колебательных систем ошибка не просто велика, а несимплектична: она нарушает геометрическую структуру фазового пространства, отвечающую за сохранение энергии. Никакое разумное уменьшение $dt$ эту болезнь не лечит полностью — лечит смена метода.

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

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

Итоги

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