Engee 文档
Notebook

代数循环的概念

当反馈系统的反馈回路中只包含直接传递模块时,就会出现代数回路(loop)。直接传递模块是指使用当前时间步的输入值计算当前时间步的输出值的模块。因此,一个只包含直通模块的闭环会在单个时间步长内的输出和输入值之间形成循环关系。

不可直接转移的块保持着一个或多个状态变量,这些状态变量存储着前几个时间步的输入值。例如,积分器Integrator 和延迟Delay

考虑一个包含求和块的模型。它从输入值$u$ 中减去块$x_a$ 的输出值。

newmodel_1_1742392010658.png

该模型实现了以下方程: $$ x_a = u - x_a $$

正如你所看到的,这里有一个代数循环。这种情况下的解决方法很简单--重写等式:

$$ x_a = u/2 $$

数学解释

Engee 有用于模拟原始微分方程(ODE)的数值求解器。ODEs 是方程组,可以用以下形式写成:

$$ \dot{x}=f(x,t) $$

其中$x$ 是状态向量,$t$ 是独立时间变量。

有些方程系统包含额外的约束条件,其中包括自变量和状态向量,但不包括状态向量的导数。这类方程组称为微分代数方程(DAE)

代数 "一词指的是没有导数的方程。您可以用偏导数来表示微分方程:

$$ \dot{x}=f(x,x_a,t) $$ $$ 0=g(x,x_a,t) $$

其中 *$f$ 和$g$ 可以是矢量函数;

  • 第一个方程是微分方程;
  • 第二个方程是代数方程;
  • 微分变量向量是微分变量向量。$x$
  • 代数变量向量为$x_a$

在模型中,代数周期代表代数约束。具有代数周期的模型定义了一个微分代数方程系统。在每个模拟步骤中,代数周期都要使用 ODE 求解器对$x_a$ 进行数值求解。

请看这个实现简单微分方程系统的模型。内循环是代数约束,外循环是微分方程。

newmodel_1_1742389181735.png

该模型实现了 DAU 系统: $$ \dot{x}=x_a $$ $$ 0=u-x-2x_a $$

对于 ODE 求解器执行的每一步,代数循环求解器必须先求解$x_a$ 的代数约束,然后再计算导数$\dot{x}$ 。

人工代数环

例如,当使用原子子系统时,可能会出现人为的代数循环。此类系统实现了非虚拟层次结构,在模拟过程中被视为独立单元。一个原子子系统在给定的时间步长内执行,直到子系统内的每个单元都执行完毕,然后再执行子系统外的其他单元。

让我们来看一个例子。给定一个模型,它是一个带有比例对象控制器的控制系统,该控制器由

$$ G(s)=\frac{1}{s^2+2s+1} $$

该系统没有代数变量,没有前向传递块反馈,也不包含代数回路。

newmodel_1_19_03_25_15_44_58.png

打开机型create_alg_loop.engee ,具体步骤如下:

  • 将控制器和控制对象封装在一个子系统中。

  • 在子系统参数中选择 "转换为原子单元",使子系统成为原子单元。

  • 运行模型。

您还可以运行完成的模型atomic_alg_loop.engee

结果会出现错误: image.png

在对该模型建模时,由于子系统是直的,而原子子系统内的路径不是直的,因此会出现代 数循环。由于发现代数循环,建模停止。

结论

如果您的模型包含代数循环,则无法在 Engee 中模拟该模型。您也无法从这样的模型生成代码。应避免代数循环。删除代数循环](https://engee.com/community/ru/catalogs/projects/udalenie-algebraicheskikh-petel) 中介绍了如何避免。

示例中使用的块