Извлеките большую матрицу и правую сторону полулинейной системы дифференциальных алгебраических уравнений
[
возвращает большую матрицу M
,F
] =
massMatrixForm(eqs
,vars
)M
и правая сторона уравнений F
из полулинейной системы дифференциальных алгебраических уравнений первого порядка (ДАУ). Алгебраические уравнения в eqs
это не содержит производных переменных в vars
соответствуйте пустым строкам большой матрицы M
.
Большая матрица M
и правая сторона уравнений F
обратитесь к этой форме.
Преобразуйте полулинейную систему дифференциальных алгебраических уравнений к форме большой матрицы.
Создайте следующую систему дифференциальных алгебраических уравнений. Здесь, функции x1(t)
и x2(t)
представляйте переменные состояния системы. Система также содержит символьные параметры r
и m
, и функциональный f(t, x1, x2)
. Задайте уравнения и переменные как два символьных вектора: уравнения как вектор символьных уравнений и переменные как вектор символьных вызовов функции.
syms x1(t) x2(t) f(t, x1, x2) r m; eqs = [m*x2(t)*diff(x1(t), t) + m*t*diff(x2(t), t) == f(t,x1(t),x2(t)),... x1(t)^2 + x2(t)^2 == r^2]; vars = [x1(t) x2(t)];
Найдите форму большой матрицы этой системы.
[M,F] = massMatrixForm(eqs, vars)
M = [ m*x2(t), m*t] [ 0, 0] F = f(t, x1(t), x2(t)) r^2 - x2(t)^2 - x1(t)^2
Решите эту систему с помощью числового решателя ode15s
. Прежде чем вы будете использовать ode15s
, присвойте следующие значения символьным параметрам системы: m = 100
, r = 1
, f(t, x1, x2) = t + x1*x2
. Кроме того, замените переменные состояния x1(t)
, x2(t)
переменными Y1
, Y2
приемлемый matlabFunction
.
syms Y1 Y2; M = subs(M, [vars,m,r,f], [Y1,Y2,100,1,@(t,x1,x2) t+x1*x2]); F = subs(F, [vars,m,r,f], [Y1,Y2,100,1,@(t,x1,x2) t+x1*x2]);
Создайте следующие указатели на функцию MM
и FF
. Можно использовать эти указатели на функцию в качестве входных параметров для odeset
и ode15s
. Эти функции требуют, чтобы переменные состояния были заданы как вектор-столбцы.
MM = matlabFunction(M,'vars',{t,[Y1;Y2]}); FF = matlabFunction(F,'vars',{t,[Y1;Y2]});
Решите систему с помощью ode15s
.
opt = odeset('Mass', MM, 'InitialSlope', [0.005;0]); ode15s(FF, [0,1], [0.5; 0.5*sqrt(3)], opt)
daeFunction
| decic
| findDecoupledBlocks
| incidenceMatrix
| isLowIndexDAE
| matlabFunction
| ode15s
| odeFunction
| odeset
| reduceDAEIndex
| reduceDAEToODE
| reduceDifferentialOrder
| reduceRedundancies