开始使用 Engee 中的求解器
什么是求解器?
*求解器*是计算*Engee*模型动态行为的工具。求解器的选择及其设置会极大地影响最终解的准确性和获得解的速度。一个不成功的求解器甚至可能导致错误的求解。没有适用于所有问题的通用求解器,因此在选择求解器时必须考虑建模目标和模型特征。
要查看当前求解器或选择其他求解器,请打开设置 |
首先要做的是选择求解器类型:
-
音调不变 - 在整个计算实验过程中,步骤保持不变。通常用于实时计算或检查数值解的正确性。通常效率较低,因为整个模拟区间的步长受限于某些动态部分的要求。将步长减小到一定限度可以提高求解的准确性,但自然会对计算速度产生负面影响;
-
可变螺距 - 随着计算实验的进行,自动调整步长,同时考虑解的变化和局部积分误差的估计。这种求解器在复杂域中减小步长以保持精度,在简单域中增大步长以加快计算速度。
求解器还分为离散求解器和连续求解器。对于无连续状态的模型(无连续积分器、传递函数等的模型),使用离散求解器,否则使用连续求解器。如果为不带连续状态的模型选择了连续求解器,则会根据最初的选择,自动由离散恒步或变步求解器取代,以提高效率。如果尝试使用离散求解器计算有连续状态的模型,则会在开始计算时出错。
连续求解器可以基于各种类型的数值方法,其中值得单独提及的有
-
* 隐式方法* - 每一步都需要求解非线性代数方程系统。这种方法适用于刚性系统(见第……节)。 求解器选择),因为它们允许大步求解而不会失去稳定性,但每一步都需要大量计算资源。在 Engee 中的例子:ImplicitEuler, Trapezoid, TRBDF2, RadauIIA5, KenCarp*, Kvaerno*, QNDF*, QBDF*, FBDF;
-
半隐式方法 - 与隐式方法不同,每一步都需要求解线性代数方程组。与隐式方法一样,它们非常适合刚性方程组。在一般情况下,这在很大程度上取决于雅可比矩阵的计算精度。在 Engee 中的例子:罗森布洛克*,罗达斯*;
-
多步法 - 使用前几步的数据来计算下一步。它们对大型问题特别有效,但在存在多个事件的情况下,它们的速度会因不断的再迭代而下降,因此不建议用于具有不连续成分的模型。在 Engee 中的例子:VCABM*, AB*, ABM*, QNDF*, QBDF*, FBDF。
-
是一个方法族,例如 Kvaerno* 表示 Kvaerno3、Kvaerno4、Kvaerno5 等。
-
求解器选择
在计算模型时,不可能同时实现高精度和高速度。有必要通过选择合适的求解器来平衡这些参数。这就需要充分了解所求解系统的特点,即
-
系统刚性--刚性模型是指快速和慢速过程同时发生的模型,如化学反应或机电系统。对于这类模型,显式方法由于其稳定区域较小,需要的步长非常小,因此最好使用隐式或半隐式方法,其步长仅受精度要求的限制。如果一个系统的时间常数相差 6 个数量级或更多,则该系统被视为刚性系统;
-
模型大小 - 唯一标识模型特定状态的连续变量的数量。如果一个模型的状态变量超过 1000 个,则该模型被视为大型模型。数量越多,计算速度越慢,尤其是在使用隐式和半隐式方法时。对于大型模型,最好使用每一步右侧(系统导数)计算量较少的方法;
-
对求解精度的要求 - 确定数值解与精确解的接近程度。对绝对精度和相对精度的要求是分开的:
-
绝对精度 (atol)--如果变量的模数小于该设定值,则认为变量的局部误差估计值为零。例如,对于具有一阶求解成分的模型,通常使用 ,但一般来说,每个特定模型都有自己的设定值;
-
相对精度 (rtol) - 定义相对于变量值本身的允许局部误差。设定值的近似值:
-
- 低精度;
-
- 高精度;
-
- 极高精度。
更高的精度需要使用高级求解器,这会明显增加总计算时间。
-
-
-
求解中的间隙 - 某些库组件(如Abs 或饱和度 )具有行为突变的特点,导致求解中出现间隙。对于此类问题,多步骤方法的效率通常较低。
下表可作为选择变步长求解器的起点:
精度/刚性 | 非刚性 | 中等硬度 | 刚性 |
---|---|---|---|
低 |
BS3 |
ROCK2 |
ImplicitEuler, Trapezoid, Rodas3, Rosenbrock23, TRBDF2 高维度:TRBDF2 |
中尺寸 |
Tsit5、BS5、DP5 大尺寸: VCABM |
ROCK4 |
Rodas4, Rodas4p, KenCapr4 大维度: QNDF、QBDF |
高维 |
DP8、Vern6、Vern7、Vern8、Vern9 高维:VCABM |
Rodas5, Rodas5p, RadauIIA5, Kvaerno5 |
罗达斯 5 号、罗达斯 5p 号、RadauIIA5 号、Kvaerno5 号 大维度: QNDF、QBDF |
由于没有适用于所有模型的通用求解器,您应该根据问题的特殊性、所需精度和可接受的计算时 间自行选择求解器。在这种情况下,您不仅可以尝试一个单元格(如上表所示)中的求解器,还可以尝试相邻单元格中的求解器,以找到最优解。合理的解决方案是在性能和质量之间找到平衡点,从而实现正确高效的建模。