主要内容

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 ^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系统是否低电平(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);var = [x1(t), x2(t), x3(t)];

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

isLowIndexDAE(方程式一样,var)
逻辑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

输入参数

全部折叠

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

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

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

输出参数

全部折叠

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

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

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

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

算法

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

介绍了R2014b