将一阶半线性微分代数方程组转化为微分指标为0的等价方程组
将微分代数方程组(DAEs)转换为隐式常微分方程组(ode)。
创建以下由两个微分代数方程组成的系统。这里是符号函数x (t)
,y (t)
,z (t)
表示系统的状态变量。将方程和变量指定为两个符号向量:方程作为符号方程的向量,变量作为符号函数调用的向量。
信谊x (t) y (t) z (t)方程式= [diff (x, t) + x * diff (y, t) = = y,…X *diff(X, t)+ X ^2*diff(y) = sin(X),…X ^2 + y^2 = t*z];var = [x(t), y(t), z(t)];
使用reduceDAEToODE
重写这个方程组,使微分指标是0
.
newEqs = reduceDAEToODE(eqs, vars)
newEqs = x (t) * diff (y (t), t) - y (t) + diff (x (t), t) diff (x (t) t) * (cos (x (t)) - y (t) - x (t) * diff (y (t), t) z (t) - 2 * x (t) * diff (x (t) t) - 2 * y (t) * diff (y (t), t) + t * diff (z (t), t)
检查以下DAE系统是否低电平(0
或1
)或高(> 1
)微分指数。如果指数高于1
,首先尝试通过使用来减少索引reduceDAEIndex
然后通过使用reduceDAEToODE
.
建立微分代数方程组。这里的功能x1 (t)
,x2 (t)
,x3 (t)
表示系统的状态变量。系统还包含了相应的功能q1 (t)
,q2 (t)
,第三季度(t)
.这些函数不表示状态变量。将方程和变量指定为两个符号向量:方程作为符号方程的向量,变量作为符号函数调用的向量。
信谊x1 (t) x2 (t) x3 (t) q1 (t) q2 (t)第三季度(t)方程式=[差异(x2) = = q1 - x1, diff (x3) = = q2 - 2 * x2 - t * (q1-x1),第三季度- t * x2 - x3);var = [x1(t), x2(t), x3(t)];
使用isLowIndexDAE
查看系统的微分指标。对于这个系统,isLowIndexDAE
返回0
(假
).这意味着系统的微分指标为2
或更高版本。
isLowIndexDAE(方程式一样,var)
逻辑0
使用reduceDAEIndex
就像你第一次尝试重写系统那样,让微分索引是1
.对于这个系统,reduceDAEIndex
发出警告,因为它不能将系统的微分索引减少为0
或1
.
[newEqs, newVars] = reduceDAEIndex(eqs, vars)
警告:减少的DAEs指数大于1。newEqs = x1 (t) - q1 (t) +差异(x2 (t), t) Dx3t (t) - q2 (t) + 2 * x2 (t) + t * (q1 (t) - x1 (t))第三季度(t) - x3 (t) - t * x2 (t) diff (q3 (t), t) - x2 (t) - t *差异(x2 (t), t) - Dx3t (t) newVars = x1 (t) x2 (t) x3 (t) Dx3t (t)
如果reduceDAEIndex
不能减少半线性系统使其指标为0
或1
,试着用reduceDAEToODE
.这个函数可能会慢得多,因此不建议将其作为首选。使用带有两个输出参数的语法也可以返回约束方程。
[newEqs, constraintEqs] = reduceDAEToODE(eqs, vars)
newEqs = x1 (t) - q1 (t) +差异(x2 (t), t) 2 * x2 (t) - q2 (t) + t * q1 (t) - t * x1 (t) + diff (x3 (t), t) diff (x1 (t), t) - diff (q1 (t), t) + diff (q2 (t), t, t) - diff (q3 (t), t, t, t) constraintEqs = x1 (t) - q1 (t) + diff (q2 (t), t) - diff (q3 (t), t, t) x3 (t) - q3 (t) + t * x2 (t) x2 (t) - q2 (t) + diff (q3 (t) t)
使用带有三个输出参数的语法返回新方程、约束方程和原始系统的微分索引,方程式
.
[newEqs, constraintEqs, oldIndex] = reduceDAEToODE(eqs, vars)
newEqs = x1 (t) - q1 (t) +差异(x2 (t), t) 2 * x2 (t) - q2 (t) + t * q1 (t) - t * x1 (t) + diff (x3 (t), t) diff (x1 (t), t) - diff (q1 (t), t) + diff (q2 (t), t, t) - diff (q3 (t), t, t, t) constraintEqs = x1 (t) - q1 (t) + diff (q2 (t), t) - diff (q3 (t), t, t) x3 (t) - q3 (t) + t * x2 (t) x2 (t) - q2 (t) + diff (q3 (t), t) oldIndex = 3
的实现reduceDAEToODE
是基于高斯消去的。该算法比常用的Pantelides算法更可靠reduceDAEIndex
,但可能会慢得多。
daeFunction
|decic
|findDecoupledBlocks
|incidenceMatrix
|isLowIndexDAE
|massMatrixForm
|odeFunction
|reduceDAEIndex
|reduceDifferentialOrder
|reduceRedundancies