Численное интегрирование и решение ОДУ

Когда аналитического решения нет, MATLAB считает интегралы и дифференциальные уравнения численно.

ode45 — решатель обыкновенных дифференциальных уравнений по методу Рунге — Кутты с адаптивным шагом.

Численное интегрирование

Определённый интеграл функции считает integral(fun, a, b), где fun — анонимная функция (вспомните раздел про функции). Метод сам подбирает разбиение, чтобы достичь нужной точности.

f = @(x) x.^2;
I = integral(f, 0, 1);   % интеграл x^2 от 0 до 1 = 1/3
% I ≈ 0.3333

Для интегрирования по уже имеющимся данным (а не по формуле) используют trapz — метод трапеций по точкам. Двойные и тройные интегралы — integral2, integral3.

Решение ОДУ через ode45

Дифференциальные уравнения описывают, как величина меняется во времени. MATLAB решает их численно. Самый популярный решатель — ode45. Вы задаёте правую часть dy/dt = f(t, y) анонимной функцией, начальное значение и интервал времени.

Решим dy/dt = -2y, y(0) = 1 (экспоненциальное затухание):

f = @(t, y) -2 * y;          % правая часть
tspan = [0 3];               % интервал времени
y0 = 1;                      % начальное условие
[t, y] = ode45(f, tspan, y0);
plot(t, y);                  % график решения

Решатель возвращает векторы t и y — моменты времени и значения решения. Их сразу можно построить. Точное решение здесь y = exp(-2t), и численное совпадёт с ним.

Системы уравнений

Системы ОДУ решаются так же: y становится вектором, а функция возвращает вектор производных. Так моделируют колебания, химическую кинетику, движение тел. Выбор решателя зависит от задачи: ode45 для гладких задач, ode15s для «жёстких».

РешательКогда
ode45универсальный, гладкие задачи
ode23низкая точность, быстро
ode15sжёсткие системы

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

Название ode45 кодирует метод: пара формул Рунге — Кутты 4-го и 5-го порядка. Решатель делает шаг по времени двумя формулами, сравнивает результаты и по их расхождению оценивает локальную ошибку. Если ошибка велика — шаг уменьшается, если мала — увеличивается. Этот адаптивный шаг и есть причина, почему не нужно задавать сетку времени вручную: метод сам сгущает точки там, где решение меняется резко, и разрежает на плавных участках. Отсюда и неравномерный вектор t на выходе.

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

  • Перепутать порядок аргументов функции: для ode45 это строго f(t, y), даже если t не используется.
  • Ждать равномерный вектор времени — ode45 даёт адаптивную, неравномерную сетку.
  • Применять ode45 к жёсткой системе и удивляться медленной работе — тут нужен ode15s.

Аналитика против численности

Важно понимать, почему численные методы вообще нужны. Многие уравнения, описывающие реальный мир, не имеют решения в виде формулы — его просто не существует в элементарных функциях. Движение трёх тел под взаимным притяжением, турбулентный поток, нелинейный осциллятор — всё это не решается «на бумаге». Численные методы дают другой ответ: не формулу, а таблицу значений решения в дискретных точках, вычисленную с контролируемой точностью. Это смещение от «найти формулу» к «вычислить значения» — суть вычислительной науки, и MATLAB создан именно под него. Аналитическое решение, когда оно есть, прекрасно; но реальная инженерия чаще живёт там, где формулы нет, и спасают численные методы.

Точность и контроль ошибки

У численного решения всегда есть погрешность, и зрелый подход — ею управлять, а не игнорировать. Решатели вроде ode45 принимают настройки точности через odeset: относительный и абсолютный допуски (RelTol, AbsTol) задают, насколько мелкий шаг метод готов делать ради точности. Ужесточение допусков повышает точность ценой времени счёта; послабление ускоряет, но грубит ответ. Хорошая практика — проверить решение, прогнав задачу с разными допусками: если ответ стабилен, ему можно доверять; если заметно меняется, метод ещё не сошёлся. Эта дисциплина — всегда спрашивать «а насколько точен мой численный ответ?» — отличает осознанные вычисления от слепой веры в выданные числа.

Итоги

  • integral(f,a,b) считает определённый интеграл; trapz — по точкам данных.
  • ode45 решает dy/dt=f(t,y) с начальным условием на интервале времени.
  • Адаптивный шаг сам сгущает точки там, где решение меняется быстро.
Проверьте себя
1. Что решает ode45?
AСистемы линейных уравнений
BОбыкновенные дифференциальные уравнения
CИнтегралы
DСобственные значения
2. В каком порядке ode45 ждёт аргументы правой части?
Af(y, t)
Bf(t, y)
Cf(y)
Df(t)
3. Почему вектор времени t на выходе ode45 неравномерный?
AЭто ошибка
BМетод адаптивно меняет шаг по оценке локальной ошибки
Ct всегда равномерный
DТак задаёт пользователь