【问题标题】:Consistent terminology: Modeling, DAE, ODE一致的术语:建模、DAE、ODE
【发布时间】:2016-09-18 03:59:55
【问题描述】:
我不熟悉“物理系统建模”这一主题。我阅读了一些基础文献,并在 Modelica 和 Simulink/Simscape 中做了一些教程。我想问你,如果我对以下内容理解正确:
- 符号操作是将微分代数方程组(物理模型:DAE)转换为可由标准求解器(Runge、Kutta、BDF 等)求解的微分方程组 (ODE) 的过程
- 还有求解器可以直接求解 DAE。但是 Modelica(openModelica、Dymola)和 Simscape 将系统转换为 ODE(为什么这种方法比直接 DAE 求解器更好?)
- “平面 Modelica 代码”是转换的结果 (= ODE)。
非常感谢您的回答。
【问题讨论】:
标签:
modeling
symbolic-math
modelica
simscape
【解决方案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 类似的技术。
【解决方案2】:
所以我认为您对术语的理解也非常好。
由于在 modelica 中编程的声明式(与命令式相反),我们立即得到非常多的代数方程。 (部分)象征性地解决这些问题首先具有以下基本优势:
速度。如果不消除代数环,modelica 将实际上无法用于任何现实世界的问题,即使这样,仅在简单的情况下也不会保留代数方程。这太慢了,并且会迫使您自己在 modelica 中手动进行转换(如在命令式语言中,例如在 C/C++ 或 Simulink 中)。即使在今天,modelica 仍然比手动转换和优化的解决方案要慢。
此外,modelica 应用程序通常需要实时模拟。
正确性。符号转换基于证明,而模型应用通常用于安全关键或网络物理系统领域。
【解决方案3】:
Modelica 的符号处理包括:
- 移除面向对象的结构并获得混合 DAE(平面 Modelica)
- 执行匹配、索引缩减、临时化以获得 ODE
- 执行优化(撕裂、公共子表达式消除等)
- 为特定求解器生成代码
OpenModelica 也可以在 DAE 模式下求解系统,而无需将其转换为 ODE,我猜其他 Modelica 工具也可以做到这一点。
“平面 Modelica 代码”是移除了面向对象的 Modelica 代码,将连接方程扩展为正规方程。结果是混合 DAE。
有关这一切的更多信息,请参见 Modelica Spec 3.3(例如附录 C):
https://modelica.org/documents/ModelicaSpec33Revision1.pdf