导数作为除数在 Dymola 初始化期间给出除以零

问题描述

我构建了一个包含 dy/dx=5 导数的模型,如下面的部分所示,但模型在 Dymola 中初始化时失败,在 another question 中,它已得到解答。原因是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 中的结果:

enter image description here

但是当我在 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 中的数值求解器无法处理这种情况?

    enter image description here

enter image description here

解决方法

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

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

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

显然可以改进逻辑,但最简单的解决方案是使用以下规则:除非安全,否则不要拆分代码。

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...