【问题标题】:How to improve the convergence performance of Dymola?如何提高 Dymola 的收敛性能?
【发布时间】:2021-06-17 14:25:57
【问题描述】:

最近我正在使用 Modelica 进行流体建模,但我遇到了很多非线性方程的发散问题,如下面的屏幕截图所示。

所以我正在考虑是否可以使用变量的最小/最大/名义属性来提高模型的收敛性,尤其是当用户遇到非线性求解器故障时。根据answer of this question on StackOverflow,最小/最大属性无助于收敛,根据Modelica Specification 4.8.6,名义属性用于确定适当的公差或ε,或可用于缩放。
所以我的问题是:
如果我遇到这种由模型的非线性引起的发散问题,如何帮助编译器更好更快地收敛?
有人可能会建议用作状态变量的变量的起始值更好,但是当我处理大型模型时,我不确定如何找到我应该修改其起始值的特定状态变量。

【问题讨论】:

  • 您的公式(最后一条语句)表明您正在处理初始化问题。但是屏幕截图表明问题发生在模拟过程中。我在这里感到困惑?
  • @AtiyahElsheikh 我指的是起始值不好的情况,即使初始化也会收敛,但是在 time=0 的起始点会处于某种极端情况,因此会在模拟过程中导致发散。

标签: modelica dymola


【解决方案1】:

手册 1B 中的第 2.6.13 章“非线性系统的在线诊断”以及手册中的以下内容应该会有所帮助。你可以例如列出主导错误的状态:通常这些状态是一个很好的提示,从哪里开始改进。

【讨论】:

    【解决方案2】:

    增加了 Imke Krueger 的答案。 如果模型在 2917 秒后失败,则一种可能性是解在此之前是发散的,例如,焓会越来越低,直到模型离开有效区域。

    假设它发生得相当缓慢,最好绘制该组件中的状态和其他变量。此外,如 Imke Krueger 的回答中所指出的那样,主导错误的状态,看看它们中的任何一个似乎是不同的。

    如果它发生得更快:

    • 记录事件并检查是否在此之前发生了重要的事情,例如逆流。
    • 禁用等距输出,因为模型可能在两个输出点之间发散。

    【讨论】:

      【解决方案3】:

      在时间 = 0 时对 Jacobin 的基于特征值的分析提供了从最重要到最不重要的状态变量排名。这可能是检验最重要状态变量的起始变量的影响的一种启发式方法。

      在问题发生前一点时间进行类似的分析也是有帮助的。

      还有可能计算状态变量的动态参数敏感性(在问题发生之前)w.r.t。起始值,参见例如https://github.com/Mathemodica/DerXP 建议的方法。这会提示您哪些起始值会显着影响状态变量的值。

      【讨论】:

      • 不知道。您需要查看手册。否则,FMI 支持方向导数的评估。
      • 使用 FMI,您有什么推荐的工具吗?
      • 我刚查了DerXP,现在好像是空的,还有其他类似的库吗?
      • 是的,尚未实施。如果您想尝试,可以从参考资料中获得如何使用有限差分的提示。
      • W.r.t. FMI,您需要检查现有的基于 FMI 的工具是否为直接计算提供了此类功能。否则,理论上,可以自行实现这样的工具。
      猜你喜欢
      • 1970-01-01
      • 2018-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-03
      • 1970-01-01
      • 2020-02-16
      • 2013-09-13
      相关资源
      最近更新 更多