一阶微分代数方程的转换系统,以差分索引1的等效系统
检查以下DAE系统具有低(0
要么1
)或高(> 1
)差分索引。如果该指数高于1
,然后使用reduceDAEIndex
减少它。
创建两个差分代数方程组的下列系统。在这里,象征性的功能X(t)的
,Y(t)的
和Z(t)的
表示该系统的状态变量。指定方程和变量作为两个符号载体:方程式符号方程的矢量和变量为符号函数调用的向量。
SYMS X(t)Y(t)的Z(t)的F(T)等式= [DIFF(X)== X + Z,DIFF(Y)== F(T)中,x == Y];瓦尔= [X(t),Y(t)的,Z(T)];
用isLowIndexDAE
检查系统的差分索引。对于这个系统,isLowIndexDAE
回报0
(假
)。这意味着,系统的差分索引是2
或更高。
isLowIndexDAE(均衡器,VARS)
ANS = 0逻辑
用reduceDAEIndex
重写系统,使得所述差分索引是1
。新系统有一个额外的状态变量,DYT(t)的
。
[newEqs,newVars] = reduceDAEIndex(方程,乏)
newEqs = DIFF(X(t),T) - Z(吨) - X(t)的DYT(T) - F(T)X(t) - Y(t)的差异(X(t),T) - DYT(吨)newVars = X(t)Y(t)的Z(t)的DYT(t)的
检查新系统的微分阶低于2
。
isLowIndexDAE(newEqs,newVars)
ANS =逻辑1
减少包含两个二阶微分代数方程的系统的差分索引。因为方程是二阶方程,使用第一reduceDifferentialOrder
到系统重写到一阶的DAE的系统。
创建两个二阶DAE的下列系统。这里,X(t)的
,Y(t)的
和F(t)的
是系统的状态变量。指定方程和变量作为两个符号载体:方程式符号方程的矢量和变量为符号函数调用的向量。
syms t x(t) y(t) F(t) r g eqs = [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 ]; vars = [x(t), y(t), F(t)];
重写这个系统,使所有方程成为一阶微分方程。该reduceDifferentialOrder
函数由两个一阶表达式通过引入新的变量取代二阶DAEDXT(t)的
和DYT(t)的
。它也取代由符号表达式一级方程式。
[等式,乏] = reduceDifferentialOrder(方程,乏)
方程= DIFF(DXT(T),T)+ F(t)的* X(t)的差异(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) vars = x(t) y(t) F(t) Dxt(t) Dyt(t)
用reduceDAEIndex
重写系统,使得所述差分索引是1
。
[等式,乏,R,originalIndex] = reduceDAEIndex(方程,乏)
方程= Dxtt(T)+ F(t)的* X(t)的G + Dytt(T)+ F(t)的* Y(T) - R ^ 2 + X(t)^ 2 + Y(t)的^ 2DXT(T) - DXT1(t)的DYT(T) - DYT1(t)的2 * DXT1(T)* X(t)+ 2 * DYT1(T)* Y(t)的2 * Dxt1t(T)* X(吨)+ 2 * DXT1(T)^ 2 + 2 * DYT1(T)^ 2 + 2 * Y(t)的* DIFF(DYT1(T),T)Dxtt(T) - Dxt1t(t)的Dytt(t)的- DIFF(DYT1(T),T)DYT1(T) - DIFF(Y(T),T)瓦尔= X(t)Y(t)的F(t)的DXT(t)的DYT(t)的Dytt(t)的Dxtt(t)的DXT1(t)的DYT1(t)的Dxt1t(t)的R = [Dytt(t)的差异(DYT(T),T)] [Dxtt(t)的差异(DXT(T),T)][DXT1(t)的差异(X(t)中,t)] [DYT1(t)的差异(Y(T),T)] [Dxt1t(t)的差异(X(t)的,T,T)]originalIndex = 3
用reduceRedundancies
缩短系统。
[等式,乏] = reduceRedundancies(方程,乏)
方程= Dxtt(T)+ F(t)的* X(t)的G + Dytt(T)+ F(t)的* Y(T) - R ^ 2 + X(t)^ 2 + Y(t)的^ 22 * DXT(T)* X(t)+ 2 * DYT(T)* Y(t)的2 * Dxtt(T)* X(t)+ 2 * Dytt(T)* Y(T)+ 2 * DXT(t)^2 + 2*Dyt(t)^2 Dytt(t) - diff(Dyt(t), t) Dyt(t) - diff(y(t), t) vars = x(t) y(t) F(t) Dxt(t) Dyt(t) Dytt(t) Dxtt(t)
实施reduceDAEIndex
使用Pantelides算法。该算法通过选择性地添加原始等式的分化形式降低了较高索引系统来降低折射率的系统。所述Pantelides算法可以低估一个新系统的差分索引,并且因此,可能无法降低差分索引1
。在这种情况下,reduceDAEIndex
发出警告,并与四个输出参数的语法,返回的值oldIndex
如为NaN
。该reduceDAEToODE
功能使用更可靠,但高斯消元法速度较慢。注意reduceDAEToODE
需要DAE系统是半线性。
daeFunction
|decic
|findDecoupledBlocks
|incidenceMatrix
|isLowIndexDAE
|massMatrixForm
|odeFunction
|reduceDAEToODE
|reduceDifferentialOrder
|reduceRedundancies