代数循环的概念
*代数循环(循环)*当反馈系统在反馈电路中仅包含前向传递块时发生。 前向通过块是那些使用当前时间步长的输入值来计算当前时间步长处的输出值的块。 因此,仅包含直接通道的块的闭环在一个时间步长中创建块的输出和输入值的循环依赖性。
直接过境街区的例子:
*[增益](https://engee.com/helpcenter/stable/ru/base-lib-math-operations/gain.html )
*[乘法(乘积)](https://engee.com/helpcenter/stable/ru/base-lib-math-operations/product.html )
*[添加(Add)](https://engee.com/helpcenter/stable/ru/base-lib-math-operations/add.html )
*[转移Fcn](https://engee.com/helpcenter/stable/ru/base-lib-continuous/transfer-fcn.html )
*[状态空间](https://engee.com/helpcenter/stable/ru/base-lib-continuous/state-space.html )具有非零矩阵
未直接传输的块保持存储来自先前时间步长的输入值的一个或多个状态变量。 例如,这是积分单元[Integrator](https://engee.com/helpcenter/stable/ru/base-lib-continuous/integrator.html )和信号延迟块Delay。
考虑一个包含总和块的模型。 它减去块的输出值 从输入值 .
该模型实现以下等式:
正如你所看到的,有一个代数循环。 而在这种情况下的解决方案将很简单-重写方程:
数学解释
Engee具有用于模拟常微分方程(ODES)*的数值求解器。 ODE是方程组,可以写成:
哪里 -状态的向量和 -独立时间变量。
一些方程组包括附加约束,其包括自变量和状态向量,但不包括状态向量的导数。 这样的系统被称为微分代数方程(dau)。
术语"代数"是指其中没有导数的方程。 可以表达偏微分方程。:
哪里:
- 和 它们可以是向量函数;
*第一个方程是微分方程;
*第二个方程是代数方程;
*微分变量的向量为
*代数变量的向量为
在模型中,代数周期是代数约束。 具有代数周期的模型定义了一个微分代数方程组。 代数周期以数值方式求解 在仿真的每个步骤中使用ODE求解器。
让我们考虑这个模型,它实现了一个简单的微分方程组。 内循环是代数约束,外循环是微分方程。
该模型实现了陶氏系统:
对于ODE求解器执行的每个步骤,代数循环求解器必须求解代数约束 在计算导数之前 .
人工代数循环
人工代数循环可以例如在使用原子子系统时发生。 此类系统实现非虚拟层次结构,并且在仿真期间它们被视为单独的单元。 原子子系统在给定的时间步长期间被执行,直到子系统内部的每个块在继续执行子系统外部的其他块之前被执行。
让我们来看一个例子。 给出了一个模型,该模型是一个具有比例对象控制器的控制系统,由
系统中没有代数变量,没有来自前向通道块的反馈,并且它不包含代数轮廓。
打开模型 create_alg_loop.engee 如以下步骤所述:
*将控制器和控制对象封闭在一个子系统中。
*在子系统设置中,选择"转换为原子单位"以使子系统原子化。
*运行模型。
你也可以运行一个现成的模型。 atomic_alg_loop.engee.
结果,你会得到一个错误:

在对该模型进行建模时,会出现代数循环,因为子系统是直的,即使原子子系统内部的路径不是直的。 由于发现了代数循环,模拟停止。
结论
如果您的模型包含代数周期,那么您将无法在Engee中模拟模型。 您也无法从这样的模型生成代码。 应避免代数循环。 如何做到这一点在[出版物去除代数循环](https://engee.com/community/ru/catalogs/projects/udalenie-algebraicheskikh-petel )。