decic

Найдите сопоставимые начальные условия для неявной системы ОДУ первого порядка с алгебраическими ограничениями

Синтаксис

[y0,yp0] = decic(eqs,vars,constraintEqs,t0,y0_est,fixedVars,yp0_est,options)

Описание

пример

[y0,yp0] = decic(eqs,vars,constraintEqs,t0,y0_est,fixedVars,yp0_est,options) находит сопоставимые начальные условия для системы неявных обыкновенных дифференциальных уравнений первого порядка с алгебраическими ограничениями возвращенными функцией reduceDAEToODE.

Вызов [eqs,constraintEqs] = reduceDAEToODE(DA_eqs,vars) уменьшает систему дифференциальных алгебраических уравнений DA_eqs к системе неявных ОДУ eqs. Это также возвращает уравнения ограничений, с которыми сталкиваются во время системного сокращения. Для переменных этой системы ОДУ и их производных, decic находит сопоставимые начальные условия y0, yp0 в то время t0.

Заменяя численными значениями y0, yp0 в дифференциальные уравнения subs(eqs, [t; vars(t); diff(vars(t))], [t0; y0; yp0]) и уравнения ограничений subs(constr, [t; vars(t); diff(vars(t))], [t0; y0; yp0]) производит нулевые векторы. Здесь, vars должен быть вектор-столбцом.

y0_est задает числовые оценки для значений переменных vars в то время t0, и fixedVars указывает на значения в y0_est, который не должен изменяться во время числового поиска. Дополнительный аргумент yp0_est позволяет вам задать числовые оценки для значений производных переменных vars в то время t0.

Примеры

Найдите сопоставимые начальные условия для системы ОДУ

Уменьшайте систему ДАУ до системы неявных ОДУ. Затем найдите сопоставимые начальные условия для переменных получившейся системы ОДУ и их первых производных.

Создайте следующую дифференциальную алгебраическую систему.

syms x(t) y(t)
DA_eqs = [diff(x(t),t) == cos(t) + y(t),...
          x(t)^2 + y(t)^2 == 1];
vars = [x(t); y(t)];

Используйте reduceDAEToODE, чтобы преобразовать эту систему в систему неявных ОДУ.

[eqs, constraintEqs] = reduceDAEToODE(DA_eqs, vars)
eqs =
                 diff(x(t), t) - y(t) - cos(t)
 - 2*x(t)*diff(x(t), t) - 2*y(t)*diff(y(t), t)
 
constraintEqs =
1 - y(t)^2 - x(t)^2

Создайте набор опции, который задает числовые допуски к числовому поиску.

options = odeset('RelTol', 10.0^(-7), 'AbsTol', 10.0^(-7));

Зафиксируйте значения t0 = 0 для временных и числовых оценок для сопоставимых значений переменных и их производных.

t0 = 0;
y0_est = [0.1, 0.9];
yp0_est = [0.0, 0.0];

Можно обработать ограничение как алгебраическое уравнение для переменной x с фиксированным параметром y. Для этого, устанавливает fixedVars = [0 1]. Также можно обработать его как алгебраическое уравнение для переменной y с фиксированным параметром x. Для этого, устанавливает fixedVars = [1 0].

Во-первых, установите начальное значение x(t0) = y0_est(1) = 0.1.

fixedVars = [1 0];
[y0,yp0] = decic(eqs,vars,constraintEqs,t0,y0_est,fixedVars,yp0_est,options)
y0 =
    0.1000
    0.9950

yp0 =
    1.9950
   -0.2005

Теперь, измените fixedVars на [0 1]. Это фиксирует y(t0) = y0_est(2) = 0.9.

fixedVars = [0 1];
[y0,yp0] = decic(eqs,vars,constraintEqs,t0,y0_est,fixedVars,yp0_est,options)
y0 =
   -0.4359
    0.9000

yp0 =
    1.9000
    0.9202

Проверьте, что эти начальные значения являются сопоставимыми начальными значениями, удовлетворяющими уравнения и ограничения.

subs(eqs, [t; vars; diff(vars,t)], [t0; y0; yp0])
ans =
 0
 0
subs(constraintEqs, [t; vars; diff(vars,t)], [t0; y0; yp0])
ans =
0

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

свернуть все

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

Как правило, вы используете выражения, возвращенные reduceDAEToODE.

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

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

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

Как правило, вы используете уравнения ограничений, возвращенные reduceDAEToODE.

Начальное время, заданное как номер.

Оценки для значений переменных vars в начальное время t0, заданный как числовой вектор.

Входной вектор, указывающий, какие элементы y0_est являются фиксированными значениями, заданными как вектор с 0 s или 1 s. Фиксированные значения y0_est соответствуют значениям 1 в fixedVars. Эти значения не изменяются во время числового поиска. Нулевые записи в fixedVars соответствуют тем переменным в y0_est, для которого decic решает уравнения ограничений. Количество 0 s должно совпасть с количеством уравнений ограничений. Якобиевская матрица ограничений относительно переменных vars(fixedVars == 0) должна быть обратимой.

Оценки для значений первых производных переменных vars в начальное время t0, заданный как числовой вектор.

Опции для числового поиска, заданного как структура опций, возвращенная odeset. Например, можно задать допуски к числовому поиску здесь.

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

свернуть все

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

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

Введенный в R2014b