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

How to choose step size when using fixed step-size solver in Dymola?

我想做一个实时仿真,如果我想在Dymola中使用固定步长的求解器,不同的步长,结果可能会有点不同,所以有没有标准的程序来选择步长?还是我必须做很多计算来证明步长独立性,就像在 CFD 领域我需要证明网格独立性一样?

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

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

  • 使用“工具 -> 线性分析 -> 极点”对模型进行线性化
  • 结果是包含特征值和“命令”-window 中的 table 的图。后者应包含一列 freq. [Hz](可以通过 运行 宁“全线性分析”生成附加信息)
  • 根据求解器属性(例如稳定区域)table,从 table 中获取频率的最大值并推导出必要的步长
  • 对于正向欧拉,使用 StepSize = 1/max(freq) * 1/10
  • 是有意义的
  • 对于其他人来说,关系可能非常不同,但对于大多数显式求解器来说,这应该是一个很好的起点

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

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

选项 2(仅凭试错):

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

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

注意:上述步骤可以翻转,从较大的步长开始并减小它直到结果匹配得足够好。

Validation/Finetuning

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

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

两个选项

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