确定微分方程数值求解器中的步长

计算科学 微分方程 时间积分 精确
2021-12-21 17:43:25

我们如何定义数值微分方程求解器所需的精度?我必须优化什么才能知道?我怎么知道我处于足够的时间步长值?

例如,在 Mathematica 和 Matlab 等程序中,微分方程求解器如何知道适合您问题的步长?怎么可能自动确定?

对该方法的完整解释会很好(或者可能是一个可以用谷歌搜索的术语)。

2个回答

ODE 的典型做法是在每个时间步使用两种不同阶的方法求解。然后使用结果之间的差异来估计误差,然后决定是减少还是增加时间步长。

您可以在此处找到有关该主题的更多信息这些类型的方案的两个示例是RKF45Dormand-Prince

对于一维传输问题,在隐式方法下,我们使用无量纲数Courant number 来选择合适的时间步长:

uΔtΔxCmax

Cmax应该小于 1,如果我们把它设为 1,我们得到

ΔtΔxu

基本思想是,在一个时间步,放置在问题域中的粒子不应该通过定义求解属性的两个节点传输。

对于二维,可以将其扩展为:

uxΔtΔx+uyΔtΔyCmax