Преобразуйте систему дифференциальных алгебраических уравнений первого порядка в эквивалентную систему дифференциального индекса 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