7

我是“物理系统建模”主题的新手。我阅读了一些基础文献,并在 Modelica 和 Simulink/Simscape 中做了一些教程。我想问你,如果我对以下内容理解正确:

  • 符号操作是将微分代数方程组(物理模型:DAE)转换为可由标准求解器(Runge、Kutta、BDF、...)求解的微分方程组 (ODE) 的过程
  • 也有求解器可以直接求解 DAE。但是 Modelica(openModelica、Dymola)和 Simscape 将系统转换为 ODE(为什么这种方法比直接 DAE 求解器更好?)
  • “平面 Modelica 代码”是转换的结果 (= ODE)。

非常感谢您的回答。

4

3 回答 3

9

Modelica 的符号处理包括:

  • 删除面向对象的结构并获得混合 DAE(平面 Modelica)
  • 执行匹配、索引缩减、临时化以获得 ODE
  • 执行优化(撕裂、公共子表达式消除等)
  • 为特定求解器生成代码

OpenModelica 也可以在 DAE 模式下解决系统,而无需将其转换为 ODE,我猜其他 Modelica 工具也可以做到这一点。

“平面 Modelica 代码”是 Modelica 代码,其中对象方向被移除,连接方程被扩展为正规方程。结果是混合 DAE。

有关这一切的更多信息,请参见 Modelica Spec 3.3(例如附录 C): https ://modelica.org/documents/ModelicaSpec33Revision1.pdf

于 2016-05-20T19:40:17.307 回答
3

所以我认为你对术语的理解也很好。由于在 modelica 中编程的声明式(与命令式相反),我们立即得到非常多的代数方程。象征性地解决这些(部分)问题首先具有以下基本优势:

  • 速度。如果不消除代数环,modelica 将实际上无法用于任何现实世界的问题,即使这样,仅在简单的情况下也不会保留代数方程。这太慢了,并且会迫使您自己在 modelica 中手动进行转换(如在命令式语言中,例如在 C/C++ 或 Simulink 中)。即使在今天,modelica 仍然比手动转换和优化的解决方案要慢。此外,modelica 应用程序通常需要实时仿真。

  • 正确性。符号转换基​​于证明,而模型应用程序通常位于安全关键或网络物理系统领域。

于 2016-05-22T09:13:38.647 回答
1

另一个考虑因素是存在不同形式的 DAE,而建模通常会导致高指数 DAE 难以用数值求解 (*)。(注意“高”表示指数大于 1,通常为 2 - 但有时甚至更高。)

符号变换可以将高索引 DAE 简化为半显式索引 1 DAE,然后通过(数值)求解方程组,将它们转换为 ODE。

因此,即使一个工具直接求解 DAE,通常也求解的是半显式索引 1 DAE,而不是原始的高索引 DAE。

(我知道这个答案已经晚了。符号转换的混合部分更复杂,仍在研究中。)

有关更多信息,请参阅https://en.wikipedia.org/wiki/Differential-algebraic_system_of_equations

(*):有一些针对高指数 DAE(特别是指数 2)的求解器,但通常它们依赖于模型的特定结构,并且发现该结构需要与将指数降低到 1 类似的技术。

于 2021-01-29T10:25:59.747 回答