微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决导数作为除数在 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 代码中)。

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。