Runge-Kutta 方法在中间时间步的估计误差

计算科学 龙格库塔 数字
2021-11-26 14:17:56

当一个时间步h使用 Runge-Kutta 对被拒绝,例如 Dormand-Prince,算法从相同的初始点恢复t以更小的时间步长。一个不同的想法是在中间点恢复t+kh在哪里1/7<k<4/5,使用四阶插值。估计的误差将在中间点进行测试,直到找到可接受的点。执行这种类型的恢复时,FSAL 属性会丢失,因此在下一个时间步中会花费额外的函数评估。我的问题是:

  1. 在这些中间点计算误差是否昂贵?
  2. 这些中间点是否存在可接受的误差,值得执行此过程,或者高误差是否会使插值在整个区间内无用?
2个回答

使用插值得出连续(密集)解的误差估计称为残差控制。当 Runge-Kutta 方法用于延迟微分方程时,这种情况非常频繁。不过,除了随机取分之外,还有更聪明的方法。您可以在此处看到一些讨论,其中使用插值的属性通过几个点来完成估计最大残差的方法。

在这些中间点计算误差是否昂贵?

快速浏览¹,每个插值需要 11 个向量运算(标量乘法或向量加法)。作为比较,一个 Dormand-Prince 步骤(没有评估右侧)需要 45 个向量操作¹。在许多应用中,这两者都可以忽略不计,因为微分方程右侧的 7 次评估比这更昂贵。即使不是,插值也相对便宜。

¹即使我对此有误,至少数量级应该是正确的。

这些中间点是否存在可接受的误差,值得执行此过程,或者高误差是否会使插值在整个区间内无用?

对于高于 3 阶的显式 Runge-Kutta 方法(例如 Dormand-Prince 方法),插值误差不可避免地比积分误差具有更高的阶数。(这就是为什么在需要插值的情况下,例如积分 DDE,通常首选像 Bogacki-Shampine 这样的三阶对。)

但是,即使您的积分错误与您的积分错误具有相同的相对大小,您的建议还有另一个问题,即您没有获得任何收益。例如,假设您在整个步骤中所犯的相对误差是ρ你的中间点是t+12h,即正好在步骤的中间。那么你的插值步骤的相对误差是ρ2. 如果您现在对该错误执行两个步骤,则作为一阶近似值,您将再次得到一个错误ρ,所以你一无所获。现在,当然,你可以用更小的h,但是您的第一个插值步骤仍然比相应的调整步骤具有更高的错误。