Поиск согласованных начальных условий для неявной системы ОДУ первого порядка с алгебраическими ограничениями
[ находит непротиворечивые начальные условия для системы неявных обыкновенных дифференциальных уравнений первого порядка с алгебраическими ограничениями, возвращаемыми 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