exponenta event banner

reduceDAEIndex

Преобразовать систему дифференциальных алгебраических уравнений первого порядка в эквивалентную систему дифференциального индекса 1

Описание

пример

[newEqs,newVars] = reduceDAEIndex(eqs,vars) преобразует высокоиндексную систему дифференциальных алгебраических уравнений первого порядка eqs в эквивалентную систему newEqs дифференциального индекса 1.

reduceDAEIndex сохраняет исходные уравнения и переменные и вводит новые переменные и уравнения. После преобразования, reduceDAEIndex проверяет дифференциальный индекс новой системы путем вызова isLowIndexDAE. Если индекс newEqs равно 2 или выше, то reduceDAEIndex выдает предупреждение.

пример

[newEqs,newVars,R] = reduceDAEIndex(eqs,vars) возвращает матрицу R которая выражает новые переменные в newVars как производные исходных переменных vars.

пример

[newEqs,newVars,R,oldIndex] = reduceDAEIndex(eqs,vars) возвращает дифференциальный индекс, oldIndex, исходной системы дисковых полок, eqs.

Примеры

Уменьшение дифференциального индекса системы дисковой полки

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

Входные аргументы

свернуть все

Система дисковых полок первого порядка, заданная как вектор символьных уравнений или выражений.

Переменные состояния, определяемые как вектор символьных функций или вызовов функций, например x(t).

Пример: [x(t),y(t)]

Выходные аргументы

свернуть все

Система дисковых полок первого порядка дифференциального индекса 1, возвращаемая в виде вектора столбца символьных выражений.

Расширенный набор переменных, возвращаемый в виде вектора-столбца вызовов символьных функций. Этот вектор включает переменные исходного состояния vars далее следуют сгенерированные переменные, которые заменяют производные второго и высшего порядка в eqs.

Отношения между новыми и исходными переменными, возвращаемые в виде символьной матрицы с двумя столбцами. Первый столбец содержит новые переменные. Второй столбец содержит их определения как производных исходных переменных vars.

Дифференциальный индекс исходной системы дисковых полок, возвращаемый как целое число или NaN.

Алгоритмы

Осуществление reduceDAEIndex использует алгоритм Pantelides. Этот алгоритм сводит системы с более высоким индексом к системам с более низким индексом, избирательно добавляя дифференцированные формы исходных уравнений. Алгоритм Pantelides может недооценивать дифференциальный индекс новой системы, и, следовательно, может не уменьшить дифференциальный индекс до 1. В этом случае reduceDAEIndex выдает предупреждение и для синтаксиса с четырьмя выходными аргументами возвращает значение oldIndex как NaN. reduceDAEToODE функция использует более надёжную, но более медленную гауссову элиминацию. Обратите внимание, что reduceDAEToODE требует, чтобы система дисковых полок была полунеральной.

Представлен в R2014b