Функции и методы для решения задач с начальными условиями.
Лекция №6. Функции от функций. Дифференциальные уравнения.
6.1. Задачи с начальными условиями.
Обыкновенные дифференциальные уравнения (ОДУ) первого порядка. ОДУ 1-го порядка содержат одну или больше производных зависимой переменной y относительно единственной независимой переменной t, обычно времени. Производную y относительно t обозначают как y ′, вторую производную как y ′′, и т.д. Часто y(t) является вектором, который имеет компоненты y1, y2, ..., yn.
MATLAB обеспечивает численное решение следующих типов ОДУ 1-го порядка:
•ОДУ 1-го порядка, заданных явно, вида y ′ = f (t, y)
•Линейно неявныхОДУ вида M(t, y) y ′ = f (t, y), где M(t, y) – матрица
•ПолностьюнеявныхОДУ вида f (t, y, y ′) = 0 (только ode15i)
ОДУ высших порядков. MATLAB обеспечивает решение только ОДУ 1-го порядка. Для решения ОДУ высших порядков, необходимо переписать каждое уравнение как эквивалентную систему ОДУ 1-го порядка вида
Любое ОДУ можно представить в виде системы уравнений 1-го порядка,
выполнив подстановки
в результате получим эквивалентную систему n ОДУ 1-го порядка,
Начальные условия.В общем случае, существует множество функций y(t),которые удовлетворяют заданному ОДУ, для выделения искомого решения необходима дополнительная информация. В задачах с начальными условиями, искомое решение удовлетворяет определенному начальному условию, а именно, y равно y0 в заданный начальный момент времени t0. Тогда задача с начальными условиями для ОДУ имеет вид:
Если функция f (t, y) является достаточно гладкой, то эта задача имеет только одно решение. В общем случае, нельзя получить аналитическое выражение для решения, так, что необходимо аппроксимировать y(t) численно.
Функции и методы для решения задач с начальными условиями.
MATLAB предоставляет вычислительные процедуры для решения (solvers) 3-х видов ОДУ – нежестких ОДУ, жестких ОДУ и полностью неявных ОДУ.
Нежесткие ОДУ.MATLAB предоставляет следующие вычислительные процедуры для решения нежестких ОДУ:
ode45 – решение основано на явной формуле Рунге-Кутта. Относится к одношаговым вычислительным методам, для получения решения в текущей временной точке, y(tn), в нем требуется решение только в предыдущей временной точке, y(tn-1). В общем случае, ode45 является наилучшей функцией "первой попытки" для решения большинства задач.
ode23 – решение основано на явной формуле Рунге-Кутта пары Богаки и Шампаин. Процедура может быть более устойчива чем ode45 при наличии умеренной жесткости. Как и ode45, ode23 является одношаговой процедурой.
ode113 – вычислительная процедура изменяемого порядка Адамса-Башфорса-Мюлтона. Процедура может быть более сильно устойчива чем ode45 и является более вычислительно эффективна. ode113 является многошаговой процедурой – для получения решения в текущей временной точке, в нем требуется решение в нескольких предыдущих временных точках.
Жесткие ОДУ.Не все трудные задачи являются жесткими, но все жесткие задачи являются тяжелыми для вычислительных процедур, которые специально не разработаны для их решения. Вычислительные процедуры для решения жесткие задачи могут применяться точно так же, как и другие вычислительные процедуры. Однако, можно существенно повысить эффективность этих процедур, если снабдить их дополнительной информацией о задаче. .MATLAB предоставляет следующие вычислительные процедуры для решения нежестких ОДУ:
ode15s – вычислительная процедура изменяемого порядка, которая основана на формулах численного дифференцирования. В этой процедуре могут использоваться также формулы дифференцирования назад. Как и ode113, ode15s является многошаговой процедурой. Если Вы полагаете, что задача является жесткой, или процедура ode45 не обеспечивает получения решения, попробуйте воспользоваться ode15s.
ode23s – решение основано на усовершенствованной формуле Розенброка 2-го порядка. Т.к. это одно-шаговая вычислительная процедура, она может быть более эффективна при плохой устойчивости. ode23s может решать некоторые типы задач, для которых ode15s не эффективна.
ode23t – использует правило трапеций со "свободной" интерполяцией. Используйте эту процедуру если задача является только умеренно жесткой и Вы хотите получить решение без численного сглаживания.
ode23tb – основана на формуле Рунге-Кутта с использованием на 1-ом шаге правила трапеций, а на 2-ом – формулы дифференцирования назад 2-го порядка. Как и ode23s, эта процедура может более эффективна чем ode15s при плохой устойчивости решения.
Полностью неявные ОДУ. Вычислительная процедура ode15i позволяет решать ОДУ, которые заданы в полностью неявном виде,
ode15i основана на использовании формул дифференцирования назад. Общая запись для применения процедуры ode15i:
[t,y] = ode15i(odefun,tspan,y0,yp0,options)
Входные аргументы,
odefun – обращение к функции, которая вычисляет левую часть ОДЕ, заданного неявно.
tspan – вектор, который задает интервал интегрирования, [t0, tf]. Для получения решения в заданные моменты времени, надо задать эти моменты в виде (монотонно возрастающие или монотонно убывающие), tspan = [t0,t1,...,tf].
y0, yp0 – вектор начальных условий для и для , соответственно. Заданные значения должны удовлетворять условию f(t0,y0,yp0) = 0.
options – необязательный аргумент, который задается с использованием функции odeset.
Выходные аргументы содержат решение, которое является аппроксимацией в дискретных точках:
t – вектор-столбец точек времени
y – массив решения. Каждая строка в у есть решение в момент времени, соответствующий строке в векторе t.