Задача Коши — главный объект численных методов
Численные методы не решают абстрактное уравнение — они решают конкретную задачу Коши, шагая вперёд от заданной начальной точки.
Задача Коши — это дифференциальное уравнение $y' = f(t, y)$ вместе с начальным условием $y(t_0) = y_0$, задающим одну точку траектории.
В предыдущих уроках мы видели, что одного закона скорости $y' = f(t, y)$ недостаточно: он порождает целое семейство кривых. Чтобы выбрать из них одну, нужна точка привязки — мы говорим, где траектория находится в начальный момент: $y(t_0) = y_0$. Уравнение плюс это условие вместе образуют задачу Коши (Cauchy problem), названную в честь французского математика Огюстена Луи Коши. Именно она — центральный объект всего курса. Поймём, почему она так удобна для численного счёта и при каких условиях гарантированно имеет единственное решение.
Почему именно одна точка
Задача Коши задаёт условие в одной точке, и это идеально подходит для пошагового движения. У нас есть стартовая точка $(t_0, y_0)$ и закон скорости. Значит, мы можем посмотреть, куда указывает скорость в стартовой точке, сделать маленький шаг туда, оказаться в новой точке, снова спросить скорость — и повторять. Каждый шаг опирается только на то, что уже известно: текущую точку и формулу $f$. Нам не нужно ничего знать о будущем или о далёких краях области — только локальный закон и место, где мы сейчас. Это и делает задачу Коши естественным объектом для компьютера: алгоритм просто шагает вперёд.
(t0, y0) ---f--> (t1, y1) ---f--> (t2, y2) ---f--> ... старт шаг 1 шаг 2 каждый шаг: новая_точка = старая + dt * скорость_в_старой
Простейший шаг вперёд
Покажем эту идею на уравнении $y' = y$ с начальным условием $y(0) = 1$. Аналитическое решение нам известно — это $e^{t}$, и в точке $t = 1$ оно равно $e \approx 2.7183$. Прошагаем численно с шагом $\Delta t = 0.25$ и сравним.
import math
y = 1.0
t = 0.0
dt = 0.25
steps = 4
print('start: t=%.2f y=%.4f' % (t, y))
for i in range(steps):
slope = y
y = y + dt * slope
t = t + dt
print('step %d: t=%.2f y=%.4f' % (i + 1, t, y))
print('exact e^1 = %.4f' % math.exp(1.0))Вывод:
start: t=0.00 y=1.0000 step 1: t=0.25 y=1.2500 step 2: t=0.50 y=1.5625 step 3: t=0.75 y=1.9531 step 4: t=1.00 y=2.4414 exact e^1 = 2.7183
Мы стартовали из известной точки и за четыре шага дошли до $t = 1$, получив $2.4414$ против точного $2.7183$. Приближение грубовато — шаг великоват, и метод систематически отстаёт, потому что использует скорость в начале шага, а она занижает реальный рост. Но принцип работает: из одной точки мы восстановили всю траекторию. Уменьшая шаг, мы приблизимся к эталону.
Существование и единственность
Прежде чем запускать метод, разумно спросить: а есть ли вообще решение, и единственное ли оно? Если бы у задачи Коши было два разных решения с одной стартовой точкой, компьютер не знал бы, какое из них считать. К счастью, есть теорема существования и единственности (теорема Пикара — Линделёфа). Она гарантирует: если правая часть $f(t, y)$ ведёт себя достаточно прилично, то через каждую начальную точку проходит ровно одна траектория. Интуитивно это значит, что мир детерминирован: задав состояние сейчас, мы однозначно определяем всё будущее.
Условие Липшица на пальцах
Что значит «прилично себя ведёт»? Ключевое требование — условие Липшица по переменной $y$. Сформулируем его без формул. Представьте две близкие траектории, стартующие из чуть разных точек. Условие Липшица говорит: скорости в этих двух точках не могут отличаться слишком сильно — разница скоростей ограничена разницей положений, умноженной на некоторую константу $L$. Другими словами, функция $f$ не должна меняться по $y$ взрывным, бесконечно крутым образом. Если это так, то близкие траектории расходятся ограниченно, не пересекаются и не сливаются непредсказуемо — и решение единственно.
Наглядная картинка: если наклон чёрточек в поле направлений меняется плавно (нет бесконечно резких скачков по вертикали), решения ведут себя предсказуемо. Большинство функций из практики — многочлены, экспоненты, синусы, их комбинации — на любом ограниченном куске удовлетворяют условию Липшица. Проблемы возникают у экзотических правых частей вроде $y' = \sqrt{y}$ около нуля, где наклон становится бесконечно крутым, — там единственность может нарушиться, и из одной точки выходят несколько решений.
Как работает под капотом
Почему мельчение шага улучшает результат? Каждый шаг вносит маленькую ошибку, потому что мы заменяем кривую её касательной на длине $\Delta t$. Чем короче шаг, тем точнее касательная приближает кривую, и тем меньше накопленная ошибка. Прогоним наш пример $y' = y$, $y(0) = 1$ с разным числом шагов и посмотрим, как ошибка в точке $t = 1$ убывает.
import math
exact = math.exp(1.0)
for n in [1, 2, 4, 8, 16, 32]:
dt = 1.0 / n
y = 1.0
for i in range(n):
y = y + dt * y
print('n=%2d y(1)=%.5f error=%.5f' % (n, y, exact - y))
print('exact=%.5f' % exact)Вывод:
n= 1 y(1)=2.00000 error=0.71828 n= 2 y(1)=2.25000 error=0.46828 n= 4 y(1)=2.44141 error=0.27688 n= 8 y(1)=2.56578 error=0.15250 n=16 y(1)=2.63793 error=0.08035 n=32 y(1)=2.67699 error=0.04129 exact=2.71828
Видна ясная закономерность: при удвоении числа шагов ошибка примерно вдвое уменьшается. Это первый порядок точности — характерная черта простейшего метода Эйлера, который мы здесь по сути и запрограммировали вручную. В следующих разделах курса мы сделаем шаг умнее (методы Рунге — Кутты), чтобы ошибка падала гораздо быстрее, но сама схема «задача Коши плюс пошаговое движение вперёд» останется неизменной основой.
Частые ошибки
Первая ошибка — пытаться запустить численный метод без начального условия. Без точки старта шагать неоткуда; уравнение само по себе задаёт лишь поле скоростей. Вторая — путать существование с единственностью: решение может существовать, но быть не единственным, если нарушено условие Липшица; именно единственность гарантирует, что компьютер посчитает «то самое» решение. Третья — забывать, что численное решение всегда приближённое: получив красивые числа, легко принять их за истину, тогда как при большом шаге ошибка может быть огромной. Всегда полезно прогнать метод с двумя разными шагами и убедиться, что ответ стабилизируется.
- Задача Коши = уравнение $y' = f(t, y)$ плюс начальное условие $y(t_0) = y_0$.
- Одна стартовая точка идеальна для пошагового движения вперёд — основа всех методов курса.
- Теорема Пикара — Линделёфа гарантирует единственное решение при хорошей правой части.
- Условие Липшица означает: скорость не меняется по $y$ бесконечно резко — близкие траектории не сливаются.
- Мельчение шага уменьшает ошибку; метод Эйлера имеет первый порядок точности.
- Численное решение всегда приближённое — проверяйте устойчивость, сравнивая разные шаги.