decic

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

Описание

пример

[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.

Примеры

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

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

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

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

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

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

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

свернуть все

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

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

Введенный в R2014b