Явный метод Эйлера: простейший интегратор

Метод Эйлера — это «прибавь скорость, умноженную на шаг» — простейший интегратор, с которого всё начинается.

Явный метод Эйлера — численный метод решения дифференциальных уравнений, в котором следующее состояние вычисляется по производным, взятым в текущей точке.

Что такое интегрирование движения

Физика даёт нам ускорение — как функцию положения, скорости и времени: $a = f(x, v, t)$. Например, для пружины $a = -\frac{k}{m} x$, для гравитации $a = -g$. Задача движка — по ускорению восстановить, как меняются скорость и положение. Это и называется интегрированием уравнений движения. Поскольку аналитически проинтегрировать удаётся редко, делаем это численно — по шагам.

Явный метод Эйлера — самый прямой подход. Зная состояние $(x_n, v_n)$, вычисляем ускорение $a_n = f(x_n, v_n)$ и делаем шаг:

$$x_{n+1} = x_n + v_n \, \Delta t, \qquad v_{n+1} = v_n + a_n \, \Delta t.$$

Обратите внимание: обе новые величины считаются по старым $x_n$ и $v_n$. Поэтому метод и называется «явным» — будущее выражено явно через настоящее, без неизвестных в правой части.

Реализация и проверка

Проверим метод на пружине — гармоническом осцилляторе $a = -x$ (взяли $k = m = 1$). Точное решение — косинус: $x(t) = \cos t$, и полная энергия $E = \frac{v^2}{2} + \frac{x^2}{2}$ должна сохраняться и быть равной $0.5$. Посмотрим, что покажет Эйлер.

x, v, dt = 1.0, 0.0, 0.1
for n in range(11):
    E = 0.5*v*v + 0.5*x*x
    if n % 2 == 0:
        print(f"n={n:2d}  x={x:6.3f}  v={v:6.3f}  E={E:.4f}")
    a = -x
    x_new = x + v*dt
    v = v + a*dt
    x = x_new

Вывод:

n= 0  x= 1.000  v= 0.000  E=0.5000
n= 2  x= 0.990  v=-0.200  E=0.5101
n= 4  x= 0.940  v=-0.396  E=0.5203
n= 6  x= 0.851  v=-0.580  E=0.5308
n= 8  x= 0.727  v=-0.745  E=0.5414
n=10  x= 0.571  v=-0.883  E=0.5523

Энергия, которая обязана быть постоянной, неуклонно растёт: с $0.5000$ до $0.5523$ всего за один период. Маятник в симуляции с каждым колебанием раскачивается всё сильнее, хотя никакой накачки энергии нет. Это фундаментальный изъян явного Эйлера, к которому мы вернёмся в отдельном уроке.

Порядок точности

За один шаг метод Эйлера ошибается на величину порядка $\Delta t^2$ (локальная ошибка). Но шагов на отрезке времени $T$ примерно $\frac{T}{\Delta t}$, поэтому ошибки накапливаются, и итоговая (глобальная) ошибка пропорциональна $\Delta t$. Говорят, что метод имеет первый порядок точности. Практический смысл: чтобы уменьшить ошибку в $10$ раз, нужно в $10$ раз уменьшить шаг и сделать в $10$ раз больше вычислений. Это дорого, поэтому существуют методы более высокого порядка.

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

Геометрически Эйлер идёт по касательной: в каждой точке он определяет направление (производную) и делает прямой отрезок длиной $\Delta t$ в этом направлении. Если траектория искривляется (а у колебаний она искривляется постоянно), прямой отрезок всегда «вылетает» наружу от истинной кривой. Для осциллятора это означает систематическое раздувание амплитуды. Чем сильнее кривизна и больше шаг, тем заметнее уход.

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

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

  • Обновить $x$ по уже новой $v$. Тогда это уже не явный Эйлер, а полу-неявный — другой метод. Порядок присваиваний критичен; используйте временную переменную x_new.
  • Ждать сохранения энергии. Явный Эйлер её не сохраняет — для колебаний и орбит он накапливает энергию и «взрывается».
  • Бороться с ошибкой только уменьшением шага. Иногда дешевле сменить метод, чем гонять Эйлер с микроскопическим $\Delta t$.

Итог

  • Явный Эйлер: $x_{n+1}=x_n+v_n\Delta t$, $v_{n+1}=v_n+a_n\Delta t$, всё по старым значениям.
  • Первый порядок точности: глобальная ошибка $\sim \Delta t$.
  • Не сохраняет энергию: на колебаниях амплитуда растёт.
  • Прост и надёжен для коротких задач, плох для долгих колебательных систем.
Проверьте себя
1. Почему метод Эйлера называют «явным»?
AПотому что он точный
BПотому что новое состояние выражено явно через старое, без неизвестных в правой части
CПотому что он сохраняет энергию
DПотому что он использует производные второго порядка
2. Какой порядок точности у явного метода Эйлера?
AНулевой
BПервый: глобальная ошибка пропорциональна Δt
CВторой
DЧетвёртый
3. Что происходит с энергией гармонического осциллятора при явном Эйлере?
AСохраняется точно
BУбывает
CСистематически растёт, амплитуда раздувается
DКолеблется около нуля