主要内容

reduceDAEToODE

将一阶半线性微分代数方程组转化为指数为0的等价微分方程组

描述

例子

newEqs= reduceDAEToODE (方程式var转换一阶半线性代数方程的高指数系统方程式等价的常微分方程组,newEqs.新系统的微分指标为0的雅可比矩阵newEqs关于变量的导数var是可逆的。

例子

newEqsconstraintEqs= reduceDAEToODE(方程式var返回约束方程的向量。

例子

newEqsconstraintEqsoldIndex= reduceDAEToODE(方程式var返回微分下标。oldIndex原始半线性dae系统的,方程式

例子

将DAE系统转换为隐式ODE系统

将微分代数方程组(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²*diff(y) == sin(X),…X ^2 + y^2 == t*z];Vars = [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系统是否有低(01)或高(> 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);Vars = [x1(t), x2(t), x3(t)];

使用isLowIndexDAE检查系统的差动指标。对于这个方程组,isLowIndexDAE返回0).这意味着系统的微分指标为2或更高版本。

isLowIndexDAE(方程式一样,var)
Ans =逻辑0

使用reduceDAEIndex当你第一次尝试重写方程组时,微分下标是1.对于这个方程组,reduceDAEIndex发出警告,因为它不能将系统的差异索引降低为01

[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不能约简半线性系统,使指标为01,尝试使用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

输入参数

全部折叠

一阶半线性微分方程的系统,指定为符号方程或表达式的向量。

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

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

输出参数

全部折叠

隐式常微分方程组,以符号表达式的列向量形式返回。该系统的微分指数为0

在系统约简过程中遇到的约束方程,作为符号表达式的列向量返回。这些表达式取决于变量var而不是他们的衍生品。约束条件是方程的守恒量newEqs,意味着每个约束的时间导数对方程取模后消失newEqs

您可以使用这些方程来确定DAE系统的一致初始条件。

原始DAE系统的微分指标方程式,作为整数返回。

算法

实施reduceDAEToODE是基于高斯消去的。该算法比常用的Pantelides算法更可靠reduceDAEIndex,但它可能会慢得多。

版本历史

在R2014b中引入