将一阶微分代数方程组转化为微分指标为1的等价方程组
检查以下DAE系统是否低电平(0
或1
)或高(> 1
)微分指数。如果指数高于1
,然后用reduceDAEIndex
减少它。
创建以下由两个微分代数方程组成的系统。这里是符号函数x (t)
,y (t)
,z (t)
表示系统的状态变量。将方程和变量指定为两个符号向量:方程作为符号方程的向量,变量作为符号函数调用的向量。
信谊x (t) y (t) z (t) f (t)方程式= [diff (x) = = x + z, diff (y) = = f (t), x = = y);var = [x(t), y(t), z(t)];
使用isLowIndexDAE
查看系统的微分指标。对于这个系统,isLowIndexDAE
返回0
(假
)。这意味着系统的微分指标为2
或更高版本。
isLowIndexDAE(方程式一样,var)
逻辑0
使用reduceDAEIndex
重写这个方程组,使微分指标是1
.新系统有一个额外的状态变量,Dyt (t)
.
[newEqs, newVars] = reduceDAEIndex(eqs, vars)
newEqs = diff (x (t), t) - z (t) x (t) Dyt (t) - f (t) x (t) - y (t) diff (x (t) t) - Dyt (t) newVars = x (t) y (t) z (t) Dyt (t)
检查新系统的微分顺序是否低于2
.
isLowIndexDAE (newEqs newVars)
逻辑1
对包含两个二阶微分代数方程的系统进行微分指标化。因为方程是二阶方程,先用reduceDifferentialOrder
将系统重写为一阶dae系统。
创建以下两个二阶dae系统。在这里,x (t)
,y (t)
,F (t)
是系统的状态变量。将方程和变量指定为两个符号向量:方程作为符号方程的向量,变量作为符号函数调用的向量。
信谊t x (t) y (t) F r (t) g方程式= [diff (x (t), t, t) = = F (t) * x (t)……diff(y(t), t, t) = - f(t)*y(t) - g,…X (t)^2 + y(t)^2 = r^2;var = [x(t), y(t), F(t)];
重写这个方程组,使所有方程都变成一阶微分方程。的reduceDifferentialOrder
函数通过引入新变量,将二阶DAE替换为两个一阶表达式Dxt (t)
和Dyt (t)
.它也用符号表达式代替一阶方程。
[eqs, vars] = reduceDifferentialOrder(eqs, vars)
方程式= diff (Dxt (t), t) + F (t) * x (t) diff (Dyt (t), t) + g + F (t) * y (t) - r ^ 2 + x (t) ^ 2 + y (t) ^ 2 Dxt (t) - diff (x (t), t) Dyt (t) - diff (y (t), t) var = x (t) y (t) F (t) Dxt (t) Dyt (t)
使用reduceDAEIndex
重写这个方程组,使微分指标是1
.
[eqs, vars, R, originalIndex] = reduceDAEIndex(eqs, vars)
方程式= Dxtt (t) + F (t) * x (t) g +迪特(t) + F (t) * y (t) - r ^ 2 + x (t) ^ 2 + y (t) ^ 2 Dxt (t) - Dxt1 (t) Dyt (t) - Dyt1 (t) 2 * Dxt1 (t) * x (t) + 2 * Dyt1 (t) * y (t) 2 * Dxt1t (t) * x (t) + 2 * Dxt1 (t) ^ 2 + 2 * Dyt1 (t) ^ 2 + 2 * y (t) * diff (Dyt1 (t), t) Dxtt (t) - Dxt1t (t)迪特(t) - diff (Dyt1 (t), t) Dyt1 (t) - diff (y (t),t) var = x (t) y (t) F (t) Dxt (t) Dyt (t)迪特(t) Dxtt (t) Dxt1 (t) Dyt1 (t) Dxt1t (t) R =[迪特(t) diff (Dyt (t), t)] [Dxtt (t) diff (Dxt (t), t)] [Dxt1 (t) diff (x (t) t)] [Dyt1 (t) diff (y (t), t)] [Dxt1t (t) diff (x (t), t, t)] originalIndex = 3
使用reduceRedundancies
缩短系统。
[eqs, vars] = reducer冗余(eqs, vars)
方程式= Dxtt (t) + F (t) * x (t) g +迪特(t) + F (t) * y (t) - r ^ 2 + x (t) ^ 2 + 2 y (t) ^ 2 * Dxt (t) * x (t) + 2 * Dyt (t) * y (t) 2 * Dxtt (t) * x (t) + 2 *迪特(t) * y (t) + 2 * Dxt (t) ^ 2 + 2 * Dyt (t) ^ 2迪特(t) - diff (Dyt (t), t) Dyt (t) - diff (y (t), t) var = x (t) y (t) F (t) Dxt (t) Dyt (t)迪特(t) Dxtt (t)
的实现reduceDAEIndex
使用Pantelides算法。该算法通过选择性地添加原方程的微分形式,将高指标系统简化为低指标系统。Pantelides算法会低估一个新系统的微分指标,因此不能将微分指标降为1
.在这种情况下,reduceDAEIndex
发出警告,对于带有四个输出参数的语法,返回值为oldIndex
作为南
.的reduceDAEToODE
函数使用更可靠,但较慢的高斯消去。请注意,reduceDAEToODE
要求DAE系统是半线性的。
daeFunction
|decic
|findDecoupledBlocks
|incidenceMatrix
|isLowIndexDAE
|massMatrixForm
|odeFunction
|reduceDAEToODE
|reduceDifferentialOrder
|reduceRedundancies