去除代数循环
让我们考虑从模型中删除代数周期的方法。
引入延迟
反馈电路中的直接通道块可以在模型中创建代数周期。 您可以通过使用[Delay]块引入延迟来删除这些代数周期(https://engee.com/helpcenter/stable/ru/base-lib-discrete/delay.html )或单位延迟。
打开模型 algebraic_loop. 该模型包含三个原子子系统:a、B和C。子系统A的输出是子系统B的输入,子系统B的输出是子系统C的输入。子系统C的输出返回子系统A和子系统B,产生两个反馈回路。
如果运行模型,则会在诊断窗口中看到错误消息。
要从模型中删除代数周期,请在每个代数变量之前或之后添加延迟。 要查看此解决方案,请打开模型 algebraic_loop_two_UnitDelay,这与模型相似 algebraic_loop,而是在每个反馈周期中在增益块之后添加一个单位延迟块。
运行模型以确保在构建模型时没有检测到代数循环。
利用延迟块的这种布置,子系统A和子系统B使用来自先前时间间隔的子系统C的输出。
在这个模型中,您还可以通过在子系统B和子系统C之间添加一个单位延迟块来删除代数环路。这个信号路径是两个反馈环路的一部分,因此延迟会影响两个代数变量的路径。 要查看此解决方案,请打开模型 algebraic_loop_one_UnitDelay.engee.
利用"一步延迟"块的这种布置,子系统C使用先前时间步的值从子系统B输出以获得用于当前时间步的反馈值。
消除代数循环的其他方法
如果求解器无法解决代数问题,Engee将返回错误。 使用以下方法之一消除循环:
*重写方程以避免周期性依赖;
*将DOW转换为ODE,这将消除任何代数周期。;
*对于某些代数周期,指定周期中代数状态的初始值。 为此,可以使用例如[IC]块(https://engee.com/helpcenter/stable/ru/base-lib-signal-attributes/ic.html )。
原子系统引起的人工代数环的消除
如果原子子系统导致人工代数循环,则将其转换为虚拟循环。
将原子子系统转换为虚拟子系统:
*打开包含原子子系统的模型。
*右键单击原子子系统并选择子系统设置。
*取消选中考虑为原子单位。
创建人工代数周期的组合信号
在某些模型中,信号被分组在一起。 这样的联合可以导致Engee检测代数循环,即使没有代数约束。 如果重定向一个或多个信号,则可以消除人工代数循环。
在这个例子中,线性化模型模拟了一个由一个泵驱动的两个储层系统的动力学。 alg_loop_ss.engee:
*表现 -这是从泵进入油箱的液体的流量。
*退出 -这是第二个罐中的液体的高度。
*状态空间块确定罐系统对泵操作的动态响应。
*在"状态空间"块的输出处,获得包含 和 .
如果我们尝试模拟模型,我们将收到一条关于检测代数循环的消息。 要修复它,请按照以下步骤操作:
*更改矩阵 和 如下:

*发送 直接到输入,而不是通过状态空间块。
您可以打开已完成的模型或已编辑的模型。 alg_loop_ss_sol.engee. 现在输入信号()不直接传递到输出(矩阵 ),因此,"状态空间"块不再具有直接连接。
结论
我们已经回顾了几种在Engee模型中去除代数循环的方法。 我们重申,用代数循环构建模型是错误的和次优的。 这增加了计算成本并导致分析结果的困难。 因此,我们建议通过重新排列方程或向模型添加额外的延迟块来避免代数循环。