Найдите сопоставимые начальные условия для неявной системы ОДУ первого порядка с алгебраическими ограничениями
[
находит сопоставимые начальные условия для системы неявных обыкновенных дифференциальных уравнений первого порядка с алгебраическими ограничениями возвращенными 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
daeFunction
| findDecoupledBlocks
| incidenceMatrix
| isLowIndexDAE
| massMatrixForm
| odeFunction
| reduceDAEIndex
| reduceDAEToODE
| reduceDifferentialOrder
| reduceRedundancies