reduceRedundancies

Упростите систему дифференциальных алгебраических уравнений первого порядка путем устранения уравнений, содержащих посторонние корни и переменных

Синтаксис

[newEqs,newVars] = reduceRedundancies(eqs,vars)
[newEqs,newVars,R] = reduceRedundancies(eqs,vars)

Описание

пример

[newEqs,newVars] = reduceRedundancies(eqs,vars) устраняет уравнения, содержащие посторонние корни и переменные из системы дифференциальных алгебраических уравнений первого порядка (ДАУ) eqs. Входной параметр vars задает переменные состояния системы.

reduceRedundancies возвращает новую систему ДАУ как вектор-столбец newEqs и уменьшаемые переменные состояния как вектор-столбец newVars. Каждый элемент newEqs представляет уравнение с равной нулю правой стороной.

пример

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

Примеры

свернуть все

Упростите систему пяти дифференциальных алгебраических уравнений (ДАУ) в четырех переменных состояния к системе двух уравнений в переменных с двумя состояниями.

Создайте следующую систему пяти ДАУ в четырех переменных состояния x1(t), x2(t), x3(t) и x4(t). Система также содержит символьные параметры a1, a2, a3, a4, b, c и функциональный f(t), которые не являются переменными состояния.

syms x1(t) x2(t) x3(t) x4(t) a1 a2 a3 a4 b c f(t)
eqs = [a1*diff(x1(t),t)+a2*diff(x2(t),t) == b*x4(t),
       a3*diff(x2(t),t)+a4*diff(x3(t),t) == c*x4(t),
       x1(t) == 2*x2(t),
       x4(t) == f(t),
       f(t) == sin(t)];
vars = [x1(t),x2(t),x3(t),x4(t)];

Используйте reduceRedundancies, чтобы устранить уравнения, содержащие посторонние корни и соответствующие переменные состояния.

[newEqs,newVars] = reduceRedundancies(eqs,vars)
newEqs = 

(a1t x1(t)+a2t x1(t)2-bf(t)a3t x1(t)2+a4t x3(t)-cf(t))

newVars = 

(x1(t)x3(t))

Задайте входной порядок переменных состояния выбрать, какие переменные возвращаются при устранении ДАУ.

Создайте систему четырех ДАУ в четырех переменных состояния V_ac(t), V1(t), V2(t) и I(t). Система также содержит символьные параметры L, R и V0.

syms V_ac(t) V1(t) V2(t) I(t) L R V0
eqs = [V_ac(t) == V1(t) + V2(t),
       V1(t) == I(t)*R,
       V2(t) == L*diff(I(t),t),
       V_ac(t) == V0*cos(t)]
eqs = 

(Vac(t)=V1(t)+V2(t)V1(t)=RI(t)V2(t)=Lt I(t)Vac(t)=V0потому что(t))

vars = [V_ac(t),I(t),V1(t),V2(t)]
vars = (Vac(t)I(t)V1(t)V2(t))

Используйте reduceRedundancies, чтобы устранить уравнения, содержащие посторонние корни и переменные. reduceRedundancies приоритизирует, чтобы сохранить переменные состояния в векторном vars, начинающем с первого элемента.

[newEqs,newVars] = reduceRedundancies(eqs,vars)
newEqs = 

-Lt I(t)-RI(t)+V0потому что(t)

newVars = I(t)

Здесь, reduceRedundancies возвращает приведенное уравнение с точки зрения переменной I(t).

Когда несколько способов уменьшать ДАУ существуют, задают различный входной порядок переменных состояния выбрать, какие переменные возвращаются. Задайте другой вектор, который содержит различный порядок переменных состояния. Устраните ДАУ снова.

vars2 = [V_ac(t),V1(t),V2(t),I(t)]
vars2 = (Vac(t)V1(t)V2(t)I(t))
[newEqs,newVars] = reduceRedundancies(eqs,vars2)
newEqs = 

-Lt V1(t)+RV1(t)-RV0потому что(t)R

newVars = V1(t)

Здесь, reduceRedundancies возвращает приведенное уравнение с точки зрения переменной состояния V1(t).

Объявите три выходных аргумента при вызове reduceRedundancies, чтобы упростить систему уравнений и возвратить информацию об устраненных уравнениях.

Создайте следующую систему пяти дифференциальных алгебраических уравнений (ДАУ) в четырех переменных состояния x1(t), x2(t), x3(t) и x4(t). Система также содержит символьные параметры a1, a2, a3, a4, b, c и функциональный f(t), которые не являются переменными состояния.

syms x1(t) x2(t) x3(t) x4(t) a1 a2 a3 a4 b c f(t)
eqs = [a1*diff(x1(t),t)+a2*diff(x2(t),t) == b*x4(t),
       a3*diff(x2(t),t)+a4*diff(x3(t),t) == c*x4(t),
       x1(t) == 2*x2(t),
       x4(t) == f(t),
       f(t) == sin(t)];
vars = [x1(t),x2(t),x3(t),x4(t)];

Вызовите reduceRedundancies с тремя выходными аргументами.

[newEqs,newVars,R] = reduceRedundancies(eqs,vars)
newEqs = 

(a1t x1(t)+a2t x1(t)2-bf(t)a3t x1(t)2+a4t x3(t)-cf(t))

newVars = 

(x1(t)x3(t))

R = struct with fields:
      solvedEquations: [2x1 sym]
    constantVariables: [1x2 sym]
    replacedVariables: [1x2 sym]
       otherEquations: [1x1 sym]

Функциональный reduceRedundancies возвращает информацию об устраненных уравнениях к R. Здесь, R является массивом структур с четырьмя полями.

Поле solvedEquations содержит уравнения, которые устраняются reduceRedundancies. Устраненные уравнения содержат те переменные состояния от vars, которые не появляются в newEqs. Правая сторона каждого устраненного уравнения равна нулю.

R1 = R.solvedEquations
R1 = 

(x1(t)-2x2(t)x4(t)-f(t))

Поле constantVariables содержит матрицу с двумя столбцами. Первый столбец содержит те переменные состояния от vars что reduceRedundancies, замененный постоянными значениями. Второй столбец содержит соответствующие постоянные значения.

R2 = R.constantVariables
R2 = (x4(t)f(t))

Поле replacedVariables содержит матрицу с двумя столбцами. Первый столбец содержит те переменные состояния от vars что reduceRedundancies, замененный выражениями с точки зрения других переменных. Второй столбец содержит соответствующие значения устраненных переменных.

R3 = R.replacedVariables
R3 = 

(x2(t)x1(t)2)

Поле otherEquations содержит те уравнения от eqs, которые не содержат ни одной из переменных состояния vars.

R4 = R.otherEquations
R4 = f(t)-sin(t)

Входные параметры

свернуть все

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

Оператор отношения == определяет символьные уравнения. Если вы указываете элемент eqs как символьное выражение без правой стороны, то символьное уравнение с равной нулю правой стороной принято.

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

Входной порядок переменных состояния определяет, который уменьшал переменные, возвращаются. Если несколько способов уменьшать ДАУ существуют, то reduceRedundancies приоритизирует, чтобы сохранить переменные состояния в vars, начинающем с первого элемента.

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

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

свернуть все

Система ДАУ первого порядка, возвращенных как вектор-столбец символьных выражений. Каждый элемент newEqs представляет уравнение с равной нулю правой стороной.

Уменьшаемый набор переменных, возвращенных как вектор-столбец символьных вызовов функции.

Информация об устраненных переменных, возвращенных как массив структур, содержащий четыре поля. Чтобы получить доступ к этой информации, используйте:

  • R.solvedEquations, чтобы возвратить символьный вектор-столбец всех уравнений, что reduceRedundancies раньше заменял те переменные состояния, которые не появляются в newEqs.

  • R.constantVariables, чтобы возвратить матрицу со следующими двумя столбцами. Первый столбец содержит те переменные исходного состояния векторного vars, которые были устранены и заменены постоянными значениями. Второй столбец содержит соответствующие постоянные значения.

  • R.replacedVariables, чтобы возвратить матрицу со следующими двумя столбцами. Первый столбец содержит те переменные исходного состояния векторного vars, которые были устранены и заменены с точки зрения других переменных. Второй столбец содержит соответствующие значения устраненных переменных.

  • R.otherEquations, чтобы возвратить вектор-столбец, содержащий все исходные уравнения eqs, которые не содержат ни одной из входных переменных vars.

Введенный в R2014b