为什么计算 ODE 系统在某个区间上的解所花费的时间会随着区间大小的增加而非线性增加?

计算科学 非线性方程
2021-12-26 07:26:08

目前,我的问题需要我解决一个大型非线性 ODE 系统(最多约 5000 个)。到目前为止,我一直在使用scipy.integrate.odeint它作为我的主力。

我的问题的一个更简单的子集只涉及约 50 个非线性 ODE。在区间上求解系统的 3 倍不错![0,10][0,1]

但是,在上求解的 1500 倍不太好![0,1000][0,1]

可能出现这种情况的一个明显原因是,在之间的某些点,解决方案的收敛时间比平时要长得多——因此,在每个时间步求解系统所花费的平均时间大于然后超过我的直觉在这里正确吗?[0,1000][0,1000][0,1]

还有哪些其他问题?

1个回答

自适应时间积分器调整步长以尝试最大化效率,同时将截断误差(通常是局部的)控制在规定的容差范围内。如果解发生快速变化,则局部截断误差估计将迫使时间步长减小。隐式积分器具有额外的复杂性,即代数系统(尤其是非线性系统)可能需要大不相同的工作量,而工作量可能取决于步长。

生产 ODE 集成器应该包括诊断,以便您可以看到时间花费在哪里(例如,非常短的时间步长或许多非线性迭代)。然后,您可以决定是更改方法参数、选择不同的方法还是接受观察到的性能。