主要内容

reduceDAEIndex

将一阶微分代数方程组转化为微分指标为1的等价方程组

描述

例子

newEqsnewVars) = reduceDAEIndex (方程式var转换一阶微分代数方程组的高指标系统方程式等价系统newEqs微分指标1。

reduceDAEIndex保留原有的方程和变量,引入新的变量和方程。转换后,reduceDAEIndex通过调用来检查新系统的差分索引isLowIndexDAE.如果newEqs是2还是更大reduceDAEIndex发出一个警告。

例子

newEqsnewVarsR) = reduceDAEIndex (方程式var收益矩阵R这表示了新变量newVars作为原始变量的导数var

例子

newEqsnewVarsRoldIndex) = reduceDAEIndex (方程式var返回微分索引,oldIndex的原始dae系统,方程式

例子

减小DAE系统的微分指标

检查以下DAE系统是否低电平(01)或高(> 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)

输入参数

全部折叠

一阶dae系统,指定为符号方程或表达式的向量。

状态变量,指定为符号函数或函数调用的向量,例如x (t)

例子:[x (t), y (t))

输出参数

全部折叠

微分索引为1的一阶dae系统,返回为符号表达式的列向量。

扩展的变量集,作为符号函数调用的列向量返回。这个向量包含原始状态变量var然后生成的变量替换二阶和高阶导数方程式

新变量和原始变量之间的关系,返回为带有两列的符号矩阵。第一列包含新变量。第二列包含它们作为原始变量导数的定义var

原始DAE系统的微分索引,以整数或

算法

的实现reduceDAEIndex使用Pantelides算法。该算法通过选择性地添加原方程的微分形式,将高指标系统简化为低指标系统。Pantelides算法会低估一个新系统的微分指标,因此不能将微分指标降为1.在这种情况下,reduceDAEIndex发出警告,对于带有四个输出参数的语法,返回值为oldIndex作为.的reduceDAEToODE函数使用更可靠,但较慢的高斯消去。请注意,reduceDAEToODE要求DAE系统是半线性的。

介绍了R2014b