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