Преобразуйте систему дифференциальных алгебраических уравнений первого порядка в эквивалентную систему дифференциального индекса 1
[
преобразует высокоиндексную систему дифференциальных алгебраических уравнений первого порядка newEqs
,newVars
]
= reduceDAEIndex(eqs
,vars
)eqs
в эквивалентную систему newEqs
дифференциального индекса 1.
reduceDAEIndex
сохраняет исходные уравнения и переменные и вводит новые переменные и уравнения. После преобразования, reduceDAEIndex
проверяет дифференциальный индекс новой системы путем вызова isLowIndexDAE
. Если индекс newEqs
2 или выше, тогда reduceDAEIndex
выдает предупреждение.
Проверьте, имеет ли следующая система ДАУ низкий уровень (0
или 1
) или высокий (>1
) дифференциальный индекс. Если индекс выше 1
, затем используйте reduceDAEIndex
чтобы уменьшить его.
Создайте следующую систему двух дифференциальных алгебраических уравнений. Здесь символические функции x(t)
, y(t)
, и z(t)
представляет переменные состояния системы. Задайте уравнения и переменные как два символьных вектора: уравнения как вектор символьных уравнений и переменные как вектор вызовов символьных функций.
syms x(t) y(t) z(t) f(t) eqs = [diff(x) == x + z, diff(y) == f(t), x == y]; vars = [x(t), y(t), z(t)];
Использовать isLowIndexDAE
для проверки дифференциального индекса системы. Для этой системы, isLowIndexDAE
возвращает 0
(false
). Это означает, что дифференциальный индекс системы 2
или выше.
isLowIndexDAE(eqs, vars)
ans = logical 0
Использовать reduceDAEIndex
переписать систему так, чтобы дифференциальный индекс был 1
. Новая система имеет одну дополнительную переменную состояния, Dyt(t)
.
[newEqs, newVars] = reduceDAEIndex(eqs, vars)
newEqs = diff(x(t), t) - z(t) - x(t) Dyt(t) - f(t) x(t) - y(t) diff(x(t), t) - Dyt(t) newVars = x(t) y(t) z(t) Dyt(t)
Проверьте, ниже ли дифференциальный порядок новой системы 2
.
isLowIndexDAE(newEqs, newVars)
ans = logical 1
Уменьшите дифференциальный индекс системы, которая содержит два дифференциальных алгебраических уравнения второго порядка. Поскольку уравнения являются уравнениями второго порядка, сначала используйте reduceDifferentialOrder
переписать систему на систему ДАУ первого порядка.
Создайте следующую систему из двух ДАУ второго порядка. Здесь, x(t)
, y(t)
, и F(t)
являются переменными состояния системы. Задайте уравнения и переменные как два символьных вектора: уравнения как вектор символьных уравнений и переменные как вектор вызовов символьных функций.
syms t x(t) y(t) F(t) r g eqs = [diff(x(t), t, t) == -F(t)*x(t),... diff(y(t), t, t) == -F(t)*y(t) - g,... x(t)^2 + y(t)^2 == r^2 ]; vars = [x(t), y(t), F(t)];
Перепишите эту систему так, чтобы все уравнения стали дифференциальными уравнениями первого порядка. reduceDifferentialOrder
функция заменяет ДАУ второго порядка двумя выражениями первого порядка путем введения новых переменных Dxt(t)
и Dyt(t)
. Он также заменяет уравнения первого порядка символьными выражениями.
[eqs, vars] = reduceDifferentialOrder(eqs, vars)
eqs = diff(Dxt(t), t) + F(t)*x(t) diff(Dyt(t), t) + g + F(t)*y(t) - r^2 + x(t)^2 + y(t)^2 Dxt(t) - diff(x(t), t) Dyt(t) - diff(y(t), t) vars = x(t) y(t) F(t) Dxt(t) Dyt(t)
Использовать reduceDAEIndex
переписать систему так, чтобы дифференциальный индекс был 1
.
[eqs, vars, R, originalIndex] = reduceDAEIndex(eqs, vars)
eqs = Dxtt(t) + F(t)*x(t) g + Dytt(t) + F(t)*y(t) - r^2 + x(t)^2 + y(t)^2 Dxt(t) - Dxt1(t) Dyt(t) - Dyt1(t) 2*Dxt1(t)*x(t) + 2*Dyt1(t)*y(t) 2*Dxt1t(t)*x(t) + 2*Dxt1(t)^2 + 2*Dyt1(t)^2 + 2*y(t)*diff(Dyt1(t), t) Dxtt(t) - Dxt1t(t) Dytt(t) - diff(Dyt1(t), t) Dyt1(t) - diff(y(t), t) vars = x(t) y(t) F(t) Dxt(t) Dyt(t) Dytt(t) Dxtt(t) Dxt1(t) Dyt1(t) Dxt1t(t) R = [ Dytt(t), diff(Dyt(t), t)] [ Dxtt(t), diff(Dxt(t), t)] [ Dxt1(t), diff(x(t), t)] [ Dyt1(t), diff(y(t), t)] [ Dxt1t(t), diff(x(t), t, t)] originalIndex = 3
Использовать reduceRedundancies
чтобы сократить систему.
[eqs, vars] = reduceRedundancies(eqs, vars)
eqs = Dxtt(t) + F(t)*x(t) g + Dytt(t) + F(t)*y(t) - r^2 + x(t)^2 + y(t)^2 2*Dxt(t)*x(t) + 2*Dyt(t)*y(t) 2*Dxtt(t)*x(t) + 2*Dytt(t)*y(t) + 2*Dxt(t)^2 + 2*Dyt(t)^2 Dytt(t) - diff(Dyt(t), t) Dyt(t) - diff(y(t), t) vars = x(t) y(t) F(t) Dxt(t) Dyt(t) Dytt(t) Dxtt(t)
Реализация reduceDAEIndex
использует алгоритм Pantelides. Этот алгоритм сводит системы с более высоким индексом к системам с более низким индексом путем избирательного добавления дифференцированных форм исходных уравнений. Алгоритм Пантелидеса может недооценивать дифференциальный индекс новой системы, и, следовательно, может не снизить дифференциальный индекс до 1
. В этом случае, reduceDAEIndex
выдает предупреждение и, для синтаксиса с четырьмя выходными аргументами, возвращает значение oldIndex
как NaN
. reduceDAEToODE
функция использует более надежное, но более медленное Гауссово исключение. Обратите внимание, что reduceDAEToODE
требует, чтобы система ДАУ была полинейной.
daeFunction
| decic
| findDecoupledBlocks
| incidenceMatrix
| isLowIndexDAE
| massMatrixForm
| odeFunction
| reduceDAEToODE
| reduceDifferentialOrder
| reduceRedundancies