选择“dopri5”和“lsoda”的一般启发式方法?

计算科学 scipy 一体化
2021-12-12 03:31:10

有了scipy,我可以选择使用“lsoda”:

实值可变系数常微分方程求解器,具有固定超前系数实现。它提供了隐式 Adams 方法(用于非刚性问题)和基于反向微分公式 (BDF) 的方法(用于刚性问题)之间的自动方法切换。

或“dopri5”,维基百科告诉我这是一种非刚性方法,是 MATLAB 的默认选择ode45

使用“lsoda”与“dopri5”有哪些一般启发式方法?

我想一个明显的考虑:“你的问题僵硬吗?”。好吧,如果我正在处理的问题很棘手,那么“lsoda”正在为“完成的工作过多”而苦苦挣扎。太……所以,BDF 方法似乎对刚度没有太大帮助。

你能分享一些见解吗?

1个回答

使用“lsoda”与“dopri5”有哪些一般启发式方法?

我想一个明显的考虑:“你的问题僵硬吗?”。好吧,如果我正在处理的问题很棘手,那么“lsoda”正在为“完成的工作过多”而苦苦挣扎。太……所以,BDF 方法似乎对刚度没有太大帮助。

如果被迫仅在这两种实现之间进行选择,“您的问题是否僵硬?” 将是最重要的问题,然后是关于工作精度权衡的更微妙的讨论。您确实需要构建一个工作精度图,或者您需要说明您的应用程序。以下是一些推测性的场景,可以解释你会看到什么:

  • 如果您的问题是“中度”或“轻度”僵硬,仍然值得使用 LSODE 而不是 DOPRI5,因为您可能会采用比 DOPRI5 大得多的时间步长,并且所需的线性求解的成本可能比DOPRI5 必须使用更短的时间步长进行许多功能评估。
  • 也可能是线性求解和雅可比评估对您的情况来说相对便宜(也许您的雅可比是带状或三对角线的),因此 LSODE 时间步长不必大得多就能看到优势。
  • 如果 LSODE 为您的问题自适应地选择越来越高的阶数,对于严格的容错性,高阶方法通常会胜出,并且 LSODE 为“非刚性”问题实现了 12 阶隐式 Adams 方法
  • 然而,对于松散的误差容限,如果刚度(即稳定性限制)问题不占主导地位,则低阶方法往往会占上风,因此 DOPRI5 可能更有利。
  • 此外,如果雅可比矩阵评估或线性求解比函数评估更昂贵,并且稳定性/刚度不是问题,则 DOPRI5 可能更有利。

除非性能很关键,否则尝试 DOPRI5 通常会更容易,它通常(但并非总是)便宜,然后如果它不起作用,请尝试 LSODE。如果两者都不适用于您提供的初始设置,那么您必须进行一些诊断工作以查看问题发生在哪里。