如何使 Dymola 中的动态模型与稳态设计结果一致?

问题描述

Modelica 建模是第一原理建模,所以如何测试模型并设置有效的基准很重要,例如我可以根据自己的意愿设计流体网络,但是在构建动态仿真模型时,我需要知道详细的几何结构和参数来设置我的模型的每一部分。通常,我会建立一个具有简单能量守恒定律和质量守恒定律的稳态模型,然后根据相应的设计手册设计每一台设备,但是当我将每个动态组件放在一起时,仿真到稳态时,结果是与稳态模型或多或少不同。所以我想知道我是否应该修改我的工作流程以使动态模型与稳态模型一致。欢迎提出任何建议。

#dymola #modelica

解决方法

根据我对问题的理解,您的参数值是固定的并且物理上是已知的。我将尝试使用以下方法作为启发式方法来确定需要仔细研究的(少数)组件,以了解它们如何影响或违反假定的第一原则。

这只是第一次试用,可能需要进一步改进和微调。

  1. 考虑一组重要的变量 xd(p,t) \in R^n 和参数 p。请注意,p 还包括重要的起始值。 p in R^m 仅包括稳态模型中不可用的一组附加参数。

  2. x_s表示稳态模型的相应变量

  3. t*

    表示动态模型在“半”稳态中“数值化”的时间点
  4. 考虑函数 C(xd(p,t*),xs) = ||D||^2 with D = xd(p,t*) - xs

  5. 计算 C w.t. 的偏导数pdxd/dp 表示,即

    dC/dp = d[D^T D]/dp

       = d[(x_d-x_s)^T (x_d - x_s)]/dp
    
       = (dx_d/dp)^T D + ...
    
  6. 考虑缩放上述函数,即 dC/dp * p/C(通过一些 epsilon 技巧避免预期的数值问题)

您可以在此处获得导致明显差异的最重要参数的排名。包含这些参数的少数组件可能是导致此类违规的组件。

如果这仍然没有帮助,可能是由于预期的参数之间的高相关性,我会进一步考虑虚拟参数识别问题,从中可以获得更严格的重要模型参数的排名。

如果 Modelica 语言具有表达动态参数敏感性的能力,则上述所有计算都可以作为单个 Modelica 模型轻松执行。例如,如果我们有类似 der(x,p) 对应于 dx/dp 的东西,我们可以简单地声明

dcdp = der(C,p)  

通过 DerXP library

提出了另一种方法