Dymola 求解非线性系统模型的最大能力是多少?

How much is the largest capability of solving the nonlinear system model in Dymola?

在Dymola中,我经常遇到非线性系统初始化失败,或者是大型热流体系统中难以求解的刚性系统,但对于简单系统,不会有这种问题。我的问题是:

  1. 所以我想知道求解非线性系统模型的最大能力是多少?例如,我的模型最多可以包括多少个非线性方程?
  2. Dymola 中是否有任何设置可以提高求解非线性系统的能力?
  3. 如何在不损害模型精度的情况下减少模型中非线性方程的数量?

这些问题很难以普遍有效的方式回答。我仍然会尝试分享我在 Dymola 和非线性系统方面的一些经验。

  1. 没有限制大小的硬性数字。它更多地取决于方程的非线性程度而不是它们的数量。我模拟了带有 150 号非线性系统的模型,这些模型非常稳定,而其他 10 号系统可以制动...

  2. 对此有多种观点

    • 我曾研究过一些模型,这些模型在编译期间使 C 编译器 运行 内存不足。如果您遇到此类问题,通过设置 Advanced.CompileWith64=2 强制 64 位编译会有所帮助。那么你不应该再 运行 内存不足了。这仅指尺寸而已。
    • 通过设置 Advanced.Define.DAEsolver=true 激活 DAE 模式可以提高非线性系统的性能。但这并不适用于所有求解器。
    • 除上述内容外,它还可以帮助设置 Advanced.MoveEquationsToDynamics=true,手册对此进行了说明:“它强制积分器求解非线性 对每个积分器步骤进行方程式,因此它也更频繁地更新初始猜测。"
    • 正如 Erik 所提到的,homotopy() 运算符非常重要,因为它可以帮助求解器在难以初始化的情况下收敛。
  3. 这是非常特定于模型的。解耦可以提供帮助,例如通过添加能量存储 elements/states 将系统拆分为更小的系统。这可以根据系统的物理特性来完成,如果可能的话,这是更可取的解决方案。作为(更人为的)替代方案 filter/delays 可以添加。通常这会对准确性产生负面影响。

我非常同意Markus的建议,但也想提醒您有关Modelica的同伦算子。精心选择的简化模型可以极大地帮助 Dymola 初始化具有大型且困难的非线性系统的模型。

一般来说,良好的初始猜测在求解非线性系统时非常重要。使用同伦只是提供这些好的猜测的隐含方式。