一致的术语:建模、DAE、ODE



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

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

非常感谢您的回答。

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

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

"平面Modelica代码"是Modelica代码,其中删除了对象方向,将连接方程扩展为法线方程。结果是一个混合DAE。

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

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

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

  • 正确性。符号变换是基于证明的,modelica应用通常在安全关键或网络物理系统领域。

一个额外的考虑因素是DAE有不同的形式,建模通常会导致高索引DAE的数值求解复杂(*)。(注意,"高"表示指数大于1,通常为2,但有时甚至更高。)

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

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

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

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

(*):有一些用于高索引DAE(特别是索引2)的求解器,但通常它们依赖于模型的特定结构,找到该结构需要与将索引减少到1类似的技术。

最新更新