【问题标题】:In Dymola to solve DAEs, why use the DASSL algorithm after performing the Patelides algorithm?在 Dymola 中解决 DAE,为什么在执行 Patelides 算法之后使用 DASSL 算法?
【发布时间】:2021-02-09 17:58:06
【问题描述】:

我对 Dymola 中解决 DAE 的过程感到困惑。所以我做了一个例子来探索它。
这是示例方案和控制方程的屏幕截图

基于以下变量的定义,我认为求解DAEs的过程是

  1. 选择状态变量
  2. 使用积分器根据其导数计算状态变量。
  3. 计算其他变量。

我使用以下调试设置在 Dymola 中构建模型。

由于我的模型中 DAE 的指数是 3,所以需要做指数约简,使用 Pantelides 算法后,Dymola 会在 DAE 系统中添加更多微分方程。
翻译日志验证了我的推断。

现在,根据方程浏览器,很明显 DAE 系统已被修改为 BLT 形式,我想我可以对当前方程系统使用牛顿法,但 Dymola 会使用 DASSL 算法。显然,DASSL 会再次从头构建结构雅可比矩阵,因此在初始化(使用 Pantelides 算法)和模拟(使用 DASSL 算法)过程中,将使用不同的结构雅可比矩阵。

我的问题是:
使用 Pantelides 算法进行索引缩减和分区后,我可以使用牛顿法求解方程,但为什么 Dymola 必须再次进行分区并使用 DASSL 算法?

另外,我在 Wolfram System Modeler 中比较了初始化和仿真过程中的结构雅可比矩阵,这表明这两个矩阵是不同的。

【问题讨论】:

  • 设置Advance.Define.DAEsolver=true; 有什么改变吗?
  • @Priyanka。问题不是关于特定示例,我想知道为什么在执行 Pantelides 算法并获得 DAE 系统的可解 BLT 形式之后必须使用 DASSL。我觉得没必要再做分区,用DASSL,直接计算状态变量的导数,做状态变量的积分,更新状态变量,进入下一个瞬间。

标签: differential-equations modelica dymola


【解决方案1】:

我认为实际上有两件事对于理解整个过程很重要:

  1. 对于初始化和仿真,方程组是不同的。原因是例如在第 8.6 节的Modelica Language Specification 3.4 中找到:

在此阶段,导数 der(..) 和预变量 pre(..) 也被解释为未知代数变量。初始化使用预期操作中使用的所有方程和算法...

基本上,一组不同的未知数(和相应的方程)会导致两个独立的问题,以解决初始化和仿真期间的问题。据我所知,符号处理(包括 Pantelides 算法)用于简化这两个问题。举个例子:翻译Modelica.Blocks.Examples.PID_Controller会产生以下翻译日志,它将两个方面分开(注意:“翻译的模型”和“初始化问题”是不同的):

  1. 在找到初始问题的一致解决方案后(例如,使用牛顿法),实际积分开始。 DASSL 在初始化完成后所做的,与动态模拟的所有其他求解器相同:使用来自当前步骤的信息和模型方程计算的导数计算下一个模拟步骤的状态向量(在 DASSL 的情况下)以及其他一些,DASSL 的未来值使用隐式 BDF 算法,请参阅例如here)。

DASSL 的一个特殊之处虽然不是唯一的,但它有两个接口可以在模拟期间使用:它可以与系统的 ODE 描述一起工作(在它被转换之后,例如通过符号前置Dymola 的处理)或者它可以使用 DAE 描述(通过设置Advance.Define.DAEsolver=true;)。默认情况下,使用 ODE 接口。两者都有优势,Dymola 手册指出:

启用 DAE 求解器后,模型的输出和动力学部分中的方程在调用模型期间不会被求解。相反,它们由积分器作为非线性方程组的一部分来处理,积分器在每个步骤中求解。如果转换后的模型包含多个或大型非线性方程组,则 DAE 求解器可能会更有效,因为求解的非线性系统更少。

【讨论】:

    【解决方案2】:

    在使用 Pantelides 算法进行索引缩减和 分区,我可以用牛顿法求解方程,但是为什么 Dymola 是否必须再次进行分区并使用 DASSL 算法?

    简单的答案是:它不必进行额外的分区或使用 DASSL。您只需单击几个按钮并将算法更改为 cvode、Runge-Kutta、Euler 等。我有点不确定,但我认为 Dymola 在 ODE 模式下不会为 DASSL 做任何额外的分区(我肯定知道OpenModelica 的 DASSL 算法没有——尽管使用 DAE 求解器来求解 ODE 系统有点傻)。如果您在 DAE 模式下运行模拟,您甚至可以跳过索引缩减(取决于系统的索引)。

    集成方法(例如 dassl)所做的实际上是逐步求解系统时间。 Pantelides 算法所做的是索引缩减(在 Modelica 工具中通常为 ODE 形式,这是大多数集成方法所需要的)。

    【讨论】:

    • 那么为什么在 Wolfram SystemModeler 中初始化和仿真期间的方程块不同?但是 Dymola 只提供了一组方程块用于可视化,似乎在初始化和仿真中都可以使用。在 OpenModelica 中呢?
    • 我的困惑实际上是初始化和模拟过程是使用相同的结构雅可比矩阵还是使用不同的矩阵?
    • Dymola 可能只可视化其中一个,但在大多数情况下它会有两个不同的分区。对于初始化本身,您不需要雅可比行列式,因为没有状态。非线性系统往往更大(并且可能有自己的雅可比矩阵,当然与连续时间系统不同)。 OpenModelica 没有块的图形可视化,但如果存在独立(解耦)部分,则它具有规则方程系统的多个分区。您可以检查每个分区(初始、同伦、正则和参数系统)。
    • 你能告诉我在哪里可以找到关于openmodlica中you can inspect each partition这个功能的选项或手册吗?
    • 在 OMEdit 中,您可以打开转换调试器。它有所有可用的信息。但这都在一大块信息中,并没有很好地可视化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 2017-03-31
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    相关资源
    最近更新 更多