微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Dymola 中使用固定步长求解器时如何选择步长?

如何解决在 Dymola 中使用固定步长求解器时如何选择步长?

我想做一个实时模拟,如果我想在 Dymola 中使用固定步长求解器,不同步长,结果可能会有所不同,那么是否有任何标准程序来选择步长?或者我是否必须进行大量计算来证明步长独立性,就像在 CFD 区域中我需要证明网格独立性一样?

enter image description here

解决方法

我不知道是否有标准程序,但证明数值稳定性对于非线性/混合模型的数值求解并不简单。因此,我会采用一些不严格的数学程序。由于您似乎可以自由选择步长,因此我将执行以下操作。

选项 1(至少有一点数学背景):

  • 使用“工具 -> 线性分析 -> 极点”对模型进行线性化
  • 结果应包含一列 freq. [Hz]
  • 根据求解器的属性(例如稳定区域),取最大值并为其推导出必要的步长
  • 对于 Forward Euler,使用 StepSize = 1/max(freq) * 1/10
  • 对于其他人来说,这种关系可能非常不同,但对于大多数显式求解器来说,这应该是一个很好的起点

注意:“线性分析”的其他功能可能也包含有用的信息,因此值得尝试运行它们。

上述方法的问题在于,非 LTI 系统的极点可能取决于模型的输入/状态。因此它可能会出错,因为结果分别取决于系统的状态或线性化的时间。

选项 2(只是通过跟踪和错误):

如果您大致了解步长应该是多少,您可以这样做:

  • 选择一个求解器并选择一个相当小的步长。这应该会提供良好的结果,但模拟速度较慢(例如,在您的情况下为 100 纳秒)。
  • 然后通过例如增加步长10 倍,直到差异达到您认为太大而无法继续的水平。
  • 然后减少步长的变化,以找到平衡性能和精度的最佳点。

注意:上述步骤可以颠倒过来,从一个大步长开始,然后减小它直到结果匹配得足够好。

验证/微调

为了证明上述两个选项中的任何一个的结果都不是完全关闭的,执行以下操作是有意义的:

  • 使用经过验证的运行良好的求解器创建参考结果(在 Dymola 中,我会使用具有合理相对容差的 DASSL)。
  • 使用第二个求解器仔细检查参考结果,理想情况下是完全不同的(在 Dymola 中这可能是 Radau,CVode 类似于 DASSL)
  • 将参考求解器的结果与您的固定步长求解器的结果进行比较,并检查您是否能接受差异。
  • 如果结果足够相似,您可以尝试将步长增加到差异过大的程度(微调)

两种选择

请注意,当您更改系统的属性(极点)或输入时,应重复上述过程 - 至少是验证部分。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。