物理网络的本地求解器
在*Engee*中,局部求解器的机制用于计算物理网络的行为。 系统模型识别由定向组件(如放大链路、积分器等)连接的物理网络。 每个物理网络都由自己独立的求解器计算,插值器安装在其输入和输出端。 模型的方向部分由全局求解器控制,物理网络被它感知为没有内部状态的普通方向分量。
局部求解器可以显着提高模型计算速度,而不会对解的质量造成太大影响。 物理模型通常包含不同物理性质的组件,并且不同的物理现象以不同的速度在其中发生。 例如,使用局部求解器,可以将模型的电气部分考虑为小步长,将机械部分考虑为大步长。
另一方面,电路通常用微分方程的刚性系统来描述,而机械模型则用非刚性系统来描述。 这使得电路可以使用复杂的方法,而机械电路可以使用更简单的方法。 此外,大型刚性模型可以分为几个部分,每个部分都将被视为相同的隐式或半隐式求解器。
Nxn雅可比矩阵分解的时间复杂度为 . 为了简单起见,让它完全 行动。 将大型模型拆分为两部分时,其计算的操作总数为
,
哪里 -插值器和求解器同步的开销成本。 对于至少稍微复杂的模型,这些成本通常占总计算时间的可忽略不计的一小部分。 将初始模型拆分为由局部求解器计算的两部分,充其量只能使计算加速四倍。 在实践中,由于各种因素,加速度变小,但局部求解器通常允许您显着加快计算速度。 *Engee*支持本地和全局求解器的两种类型的同步:离散和连续。
第一种类型特别适用于实时计算,例如,在复杂的 半自然节奏模拟。 物理网络表示为没有状态的离散原子组件,为此指定了采样间隔。 有两种数值方法:隐式欧拉法('ImplicitEuler')和梯形法。 对于它们的操作,没有必要对输入信号进行插值,并且根据定义,输出是离散的。
除了数值方法,它的版本被选择-快速(快速
)或可靠(鲁棒')。 如果出现收敛误差,则可以切换到算法的可靠版本(`鲁棒')或减少采样步骤。 有时将采样步骤减少到原始值的倍数是有用的,例如,不是从`0.1`到`0.01
,而是到`0.03`,以便绕过问题区域。
离散同步模式中使用的简化可能会导致模型计算得更快,但计算的准确性可能不足。 然后,您可以在相应的求解器设置窗口中减少采样间隔或切换到连续同步。
当启用连续同步时,全局求解器开始将物理网络感知为没有内部状态的连续组件。 其输入使用适合所选求解器的插值,其输出为连续函数。 有必要设置本地和全局求解器交换信息的同步间隔。 本地求解器可以根据需要执行到下一个同步点的尽可能多的中间步骤。 这种方法提高了计算的准确性,但需要很高的计算成本。
问题出现了打破代数循环-物理网络通过没有内部状态的有向组件的连接。 在这种情况下,会发生错误。:
要消除它,您可以使用 单位延迟 具有小的采样间隔:
或具有合适的时间常数的非周期性链接:
局部*Engee*求解器列表仅限于用于计算物理模型的最有用的求解器,并且是全局求解器的子集。 使用连续滤波器或诸如双曲正切的特殊函数来平滑进入物理网络的信号以近似不连续函数是有用的。
选择连续同步时,有三种类型的求解器可用’Fixed-step','Variable-step’和’Inherit global'。 前两个用于固定和可变步骤,第三个继承全局求解器的设置。 这并不意味着模型将由单个全局求解器求解。 本地求解器将收到与全局求解器相同的设置。 后一种模式在实践中很少使用,因此建议从默认设置开始:连续同步,可变步长求解器’Rodas4'。