Численное интегрирование и решение ОДУ
Когда аналитического решения нет, 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)с начальным условием на интервале времени.- Адаптивный шаг сам сгущает точки там, где решение меняется быстро.