2

我构建了一个包含 的导数的模型dy/dx=5,如以下部分所示,但该模型在 Dymola 初始化期间失败,在另一个问题中,它已得到解答。原因是在time=0时,der(x)和的值der(y)都是0,所以会出现除以0的错误。

model HowToExpressDerivative "dy/dx=5, how to describe this equation in Modelica?"
  extends Modelica.Icons.Example;
  Real x, y;
equation 
  x = time ^ 2;
  der(y) / der(x) = 5;
end HowToExpressDerivative;

这是 Dymola 中的结果:
在此处输入图像描述

但是当我在 Wolfram System Modeler 和 OpenModelica 中尝试相同的模型时,模型运行良好。
在 Wolfram System Modeler 中,它der(y)/der(x)=5直接使用方程.

我的问题是:

  1. 为什么相同的模型会在 Dymola 中失败?
  2. Dymola 是否没有能力进行自动符号操作来将这个方程der(y)/der(x)=5转换为der(y)=5*der(x)
  3. 还是 Dymola 中的数值求解器无法处理这种情况? 在此处输入图像描述

在此处输入图像描述

4

1 回答 1

3

Dymola 目前不承认这种情况下的琐碎简化(在另一种情况下完成),不是因为它太复杂,而是因为 Dymola 使用了一个简单的规则:

Modelica 代码中的分区是安全的,其他分区不被认为是安全的。

因此der(x)/der(y)=5表明除以 der(y) 是安全的(即使它显然不是),而解决该等式在技术上涉及除以1/der(y)不被认为是安全的(因为它没有出现在 Modelica 代码中)。

显然逻辑可以改进,但最简单的解决方案是使用以下规则:不要在代码中进行划分,除非这样做是安全的。

遵循该规则的一个好处是可以检查所有原始方程并查看它们是否满足(直到数值精度) - 而不会触发除以零。

于 2021-02-11T16:35:13.550 回答