Дифференциальные уравнения
Метод Эйлера и Рунге-Кутта
Метод Рунге-Кутта 4-го порядка - рабочая лошадка науки со времён 1900 года. Neural ODEs (2018) взяли ту же идею и переосмыслили нейросети как непрерывные динамические системы. Один и тот же алгоритм - столетие разницы.
- **Neural ODEs:** torchdiffeq от Chen et al. - ResNet = дискретизованное ОДУ. Continuous-depth сети с памятью O(1) вместо O(глубина).
- **Физика в играх:** интегратор Верле (аналог RK2) - стандарт в игровой физике. Сохраняет энергию лучше Эйлера при тех же вычислениях.
- **scipy.integrate.solve_ivp:** RK45 по умолчанию. Для жёстких биологических/химических систем: method='Radau'. Один вызов = полное решение ОДУ.
Предварительные знания
Явный метод Эйлера
Зачем приближать ОДУ? Потому что аналитические формулы существуют для пренебрежимо малой доли уравнений - примерно 5% из тех, что встречаются на практике. Уравнения Лотки-Вольтерра, Ван дер Поля, Лоренца, Navier-Stokes, нейросетевые ODE (Neural ODE 2018) - все решаются только численно. Метод Эйлера 1768 года - первый и простейший подход: следуем за касательной с шагом h, обновляем точку, повторяем.
Для ОДУ y' = f(t, y) метод Эйлера: **y_{n+1} = y_n + h·f(t_n, y_n)**. Геометрически - движение вдоль касательной. Локальная погрешность: O(h²) (разложение Тейлора). Глобальная погрешность: O(h) - первый порядок точности.
**Устойчивость:** для y' = λy метод Эйлера устойчив при |1 + hλ| ≤ 1. Для Re(λ) < 0 это ограничивает шаг: h ≤ 2/|λ|. Жёсткие системы (stiff) с большими |λ| требуют очень малых шагов - используйте неявные методы.
**Метод средней точки (RK2):** k₁ = f(t_n, y_n), k₂ = f(t_n + h/2, y_n + h/2·k₁), y_{n+1} = y_n + h·k₂. Глобальная погрешность O(h²) - вдвое лучше Эйлера при тех же вычислениях вычисления f.
Метод Эйлера для y' = -100y (жёсткое уравнение). При каком h метод устойчив?
Метод Рунге-Кутта 4-го порядка
**RK4** - стандарт среди явных методов. Четыре вычисления f на шаг, локальная погрешность O(h⁵), глобальная O(h⁴):
**Формулы RK4:** k₁ = f(tₙ, yₙ), k₂ = f(tₙ+h/2, yₙ+h/2·k₁), k₃ = f(tₙ+h/2, yₙ+h/2·k₂), k₄ = f(tₙ+h, yₙ+h·k₃). **y_{n+1} = yₙ + h/6·(k₁ + 2k₂ + 2k₃ + k₄)**.
Карл Рунге, Мартин Кутта и Вильгельм Кутта (1895-1901)
Метод Эйлера дал точность O(h) ещё в 1768 году, но был слишком неточен для астрономических расчётов. В 1895 Карл Рунге в Ганновере предложил оценивать наклон в середине шага - получилась схема второго порядка. В 1901 Вильгельм Кутта систематизировал семейство схем и вывел RK4 - 4 оценки f на шаг, точность O(h⁴). Метод оставался стандартом 60+ лет, пока в 1980 году Дормонд и Принс не построили адаптивную пару RK45 - с автоматическим выбором шага. Сегодня RK45 - дефолтный солвер в SciPy, MATLAB, Wolfram Mathematica и torchdiffeq для Neural ODE.
Каждая симуляция орбит спутников NASA, каждый шаг диффузионной модели генерации изображений - под капотом тот же RK4/RK45.
| Метод | Вычислений f | Погрешность | Применение |
|---|---|---|---|
| Эйлер | 1 / шаг | O(h) | Отладка, grading |
| Средняя точка (RK2) | 2 / шаг | O(h²) | Verlet в физике |
| RK4 | 4 / шаг | O(h⁴) | Стандарт для ОДУ |
| RK45 (адаптивный) | 6 / шаг | O(h⁴)-O(h⁵) | scipy.solve_ivp |
При уменьшении шага h в 2 раза в RK4, ошибка уменьшится примерно в сколько раз?
Адаптивный метод RK45
**RK45 (Dormand-Prince):** два решения на одном шаге - 4-го и 5-го порядка, используя 6 вычислений f (встроенная пара). Разность даёт **оценку ошибки** без дополнительных вычислений. Если ошибка > tol → уменьшить h; если ошибка << tol → увеличить h.
**scipy.integrate.solve_ivp:** по умолчанию RK45. Для жёстких систем: method='Radau' или 'BDF'. Параметры: rtol (относительная допустимая ошибка), atol (абсолютная). Правило: rtol=1e-3 - грубо, rtol=1e-8 - точно.
Зачем RK45 использует два метода (4-го и 5-го порядка) на одном шаге?
Neural ODEs и физическое применение
**Neural ODE (Chen et al. 2018):** вместо дискретных слоёв нейросети - непрерывная динамика dh/dt = f_θ(h, t). Прямой проход = численное решение ОДУ (RK4). Обратный проход = сопряжённый метод (adjoint method). Память O(1) вместо O(глубина).
В Neural ODE прямой проход - это решение ОДУ. Как вычисляются градиенты для обратного распространения?
Ключевые идеи
- **Эйлер:** y_{n+1} = y_n + h·f. Погрешность O(h). Прост, но нужны малые шаги.
- **RK4:** 4 вычисления f, погрешность O(h⁴). Стандарт для ОДУ общего вида.
- **Адаптивный RK45:** оценка ошибки из разности двух методов → автоматический выбор h.
- **Neural ODE:** dh/dt = f_θ(h,t). Прямой проход = RK4. Градиент = adjoint method.
Связанные темы
Численные методы для ОДУ - фундамент для PDE и ML:
- Метод конечных разностей — FD для PDE = RK/Эйлер по времени + конечные разности по пространству
- ОДУ в ML и физике — Neural ODEs и диффузионные модели используют RK4/RK45 напрямую
Вопросы для размышления
- Метод Эйлера неустойчив для жёстких систем, хотя и сходится. Почему «правильный» ответ всё равно взрывается при больших h?
- Integrator Верле используется в молекулярной динамике вместо RK4, хотя имеет второй порядок. В чём его преимущество?
- Neural ODE заменяет глубину сети на «время интегрирования». Что значит интерпретировать глубину нейросети как непрерывный параметр?