Дифференциальные алгебраические уравнения являются типом дифференциального уравнения, где одна или несколько производных зависимых переменных не присутствуют в уравнениях. Переменные, которые появляются в уравнениях без их производной, называются алгебраические, и присутствие алгебраических переменных означает, что вы не можете записать уравнения в явной форме . Вместо этого можно решить ДАУ с этими формами:
ode15s
и решатели ode23t
могут решить индекс 1 линейно неявные проблемы с сингулярной большой матрицей , включая полуявные ДАУ формы
В этой форме присутствие алгебраических переменных приводит к сингулярной большой матрице, поскольку существует один или несколько нулей на основной диагонали.
По умолчанию решатели автоматически тестируют особенность большой матрицы, чтобы обнаружить системы ДАУ. Если вы знаете об особенности загодя затем, можно установить опцию MassSingular
odeset
к 'yes'
. С ДАУ можно также предоставить решателю предположение начальных условий для использований свойства InitialSlope
odeset
. Это в дополнение к определению обычных начальных условий для в вызове решателя.
Решатель ode15i
может решить более общие ДАУ в полностью неявной форме
В полностью неявной форме присутствие алгебраических переменных приводит к сингулярной якобиевской матрице. Это вызвано тем, что по крайней мере один из столбцов в матрице, как гарантируют, будет содержать все нули, поскольку производная той переменной не появляется в уравнениях.
Решатель ode15i
требует, чтобы вы задали начальные условия и для и для . Кроме того, различающийся другие решатели ОДУ, ode15i
требует, чтобы функция, кодирующая уравнения, приняла дополнительный входной параметр: odefun(t,y,yp)
.
ДАУ возникают в большом разнообразии систем, потому что физические законы сохранения часто имеют формы как . Если x
, x'
, y
и y'
заданы явным образом в уравнениях, то это уравнение сохранения достаточно, чтобы решить для z
, не имея выражения для z'
.
Когда вы решаете ДАУ, можно задать начальные условия и для и для . Решатель ode15i
требует, чтобы оба начальных условия были заданы как входные параметры. Для ode15s
и решателей ode23t
, начальное условие для является дополнительным (но может быть задан с помощью опции InitialSlope
odeset
). В обоих случаях возможно, что начальные условия, которые вы задаете, не соглашаются с уравнениями, которые вы пытаетесь решить. Начальные условия, которые конфликтуют друг с другом, называются противоречивые. Обработка начальных условий отличается решателем:
ode15s
и ode23t
— Если вы не задаете начальное условие для , то решатель автоматически вычисляет сопоставимые начальные условия на основе начального условия, вы предусматриваете . Если вы задаете противоречивое начальное условие для , то решатель обрабатывает значения как предположения, пытается вычислить сопоставимые значения близко к предположениям и продвигается, чтобы решить проблему.
ode15i
Начальные условия, которые вы предоставляете к решателю, должны быть сопоставимыми, и ode15i
не проверяет предоставленные значения на непротиворечивость. Функция помощника decic
вычисляет сопоставимые начальные условия с этой целью.
ДАУ характеризуются их дифференциальным индексом, который является мерой их особенности. Путем дифференциации уравнений можно устранить алгебраические переменные, и если вы делаете это достаточно раз затем, уравнения принимают форму системы явных ОДУ. Дифференциальный индекс системы ДАУ является количеством производных, которые необходимо взять, чтобы выразить систему как эквивалентную систему явных ОДУ. Таким образом ОДУ имеют дифференциальный индекс 0.
Пример индексного 1 ДАУ
Для этого уравнения можно взять единственную производную, чтобы получить явную форму ОДУ
Пример индексного 2 ДАУ
Эти уравнения требуют, чтобы две производные были переписаны в явной форме ОДУ
ode15s
и решатели ode23t
только решают ДАУ индекса 1. Если индекс ваших уравнений равняется 2 или выше, то необходимо переписать уравнения как эквивалентную систему индексных 1 ДАУ. Всегда возможно взять производные и переписать систему ДАУ как эквивалентную систему индексных 1 ДАУ. Знайте, что, если вы заменяете алгебраические уравнения на их производные, затем вы можете удалить некоторые ограничения. Если уравнения больше не включают исходные ограничения, то числовое решение может дрейфовать.
Если у вас есть Символьная Математика Toolbox™, то смотрите Шаг 3. Проверьте и Уменьшите Дифференциальный Индекс (Symbolic Math Toolbox) для получения дополнительной информации.
Этот пример повторно формулирует систему ОДУ как система дифференциальных алгебраических уравнений (ДАУ). Задачей Робертсона, найденной в hb1ode.m, является классическая тестовая задача для программ, которые решают жесткие ОДУ. Система уравнений
hb1ode
решает эту систему ОДУ к устойчивому состоянию с начальными условиями, и. Но уравнения также удовлетворяют линейный закон сохранения,
С точки зрения решения и начальных условий, закон сохранения
Система уравнений может быть переписана как система ДАУ при помощи закона сохранения, чтобы определить состояние. Это повторно формулирует проблему как систему ДАУ
Дифференциальный индекс этой системы равняется 1, поскольку только единственная производная требуется, чтобы делать это системой ОДУ. Поэтому никакие дальнейшие преобразования не требуются прежде, чем решить систему.
Функциональный robertsdae
кодирует эту систему ДАУ. Сохраните robertsdae.m
в своей текущей папке, чтобы запустить пример.
function out = robertsdae(t,y)
out = [-0.04*y(1) + 1e4*y(2).*y(3)
0.04*y(1) - 1e4*y(2).*y(3) - 3e7*y(2).^2
y(1) + y(2) + y(3) - 1 ];
Полный пример кода для этой формулировки задачи Робертсона доступен в hb1dae. m.
Решите систему ДАУ с помощью ode15s
. Сопоставимые начальные условия для y0
очевидны на основе закона сохранения. Используйте odeset
, чтобы установить опции:
Используйте постоянную большую матрицу, чтобы представлять левую сторону системы уравнений.
Установите допуск относительной погрешности на 1e-4
.
Используйте абсолютный допуск 1e-10
для второго компонента решения, поскольку шкала отличается существенно от других компонентов.
Оставьте параметр «MassSingular» по умолчанию «maybe», чтобы проверить автоматическое обнаружение ДАУ.
y0 = [1; 0; 0]; tspan = [0 4*logspace(-6,6)]; M = [1 0 0; 0 1 0; 0 0 0]; options = odeset('Mass',M,'RelTol',1e-4,'AbsTol',[1e-6 1e-10 1e-6]); [t,y] = ode15s(@robertsdae,tspan,y0,options);
Постройте график решения.
y(:,2) = 1e4*y(:,2); semilogx(t,y); ylabel('1e4 * y(:,2)'); title('Robertson DAE problem with a Conservation Law, solved by ODE15S');
ode15i
| ode15s
| ode23t
| odeset