【问题标题】:Dymola 2022 and 2021x giving different solutionsDymola 2022 和 2021x 提供不同的解决方案
【发布时间】:2021-07-26 17:23:48
【问题描述】:

我有一些测试模拟在运行时,在 Dymola 2021x 和 Dymola 2022 中运行时不遵循完全相同的解决方案路径。因此,我的系统检查以确保我的测试模拟运行正常,表明它们在事实上运行不正常。看起来模拟仍然在彼此的 +/-2* 容差范围内。我试图了解为什么解决方案在输入和模型相同的情况下在数值上不相同。更新版本中没有任何内容表明存在任何解决方法更改。

【问题讨论】:

  • 我没有使用任何一个版本的 Dymola。但我会比较两个自动生成的模拟输入文件 dsin.txt。这可能暗示有什么不同。你也没有说你正在使用的数值求解器。它是一个特定的求解器吗?还是与任何求解器相关的数值差异?
  • 如果结果可以接受,我想你可以忽略它
  • 你能判断一种解决方案是否比另一种更准确吗?

标签: modelica dymola


【解决方案1】:

从 Dymola 2022 发行说明中,一种可能的解释是不同的 Modelica 语言规范(Dymola 2021x 中的 3.4,Dymola 2022 中的 3.5),或者直接影响模型(MSL 4.0.0 符合语言规范 3.4 ,例如),或模型在翻译过程中的处理方式。

您提到您有一个系统可以检查您的模拟。是在Modelica中实现的,也就是说会不会受到不同的语言规范的影响?

就个人而言,我倾向于在每个版本中对翻译算法和求解器进行细微的更改/改进;即使发行说明中可能没有提到它们。也许这种态度之所以有效,是因为我的模型相当粗糙,所以我不能真正说出计算解决方案的这种变化(在我的情况下是 +-2*tolerance,tolerance=0.1%)是否让我离真实的更近或更远解决方案。

【讨论】:

  • 确实,任何简单的更改或算法更新都会导致如此微小的修改,例如对公式进行符号操作或评估自然会导致数值上不同的结果。在 XogenyTest 库中,这种数字差异不应导致例如违反单元测试
  • 初始值是否相同?如果两个版本都使用相同的状态选择和/或如果没有给出起始值,则将相同的初始值设置为零,请检查转换日志。
  • 我会研究 Modelica 语言规范,这似乎是最合理的。我们使用 Python 脚本检查相对错误,如果它高于阈值,我们认为测试“失败”。我会调查他们。我们最大的错误似乎在初始化点附近,所以也许我会在语言规范如何处理那个时间点上找到一些新的东西。这是我们遇到问题的第一个 Dymola 新版本。
  • 如果模型非常敏感,即使更改 C 编译器也可能导致数值差异。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-26
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 2018-07-18
  • 2022-01-24
  • 1970-01-01
相关资源
最近更新 更多