为简单起见,考虑以下方程(Burges 方程):
scipy.integrate.ode.set_integrator("zvode", ..).integrate(T)
让我们使用带有可变时间步长求解器的scipy(在我的例子中)来解决它。
问题如下:如果我们在傅里叶空间中使用朴素的实现
nu * d2x(u[t])
如果时间步长太大,粘度项可能会导致过冲。这可能会导致解中出现大量噪声,甚至导致(假的)发散解(即使使用僵硬的求解器,在这个方程稍微复杂的版本上)。
一种对其进行正则化的方法是在 步骤 评估粘度项,t+dt
更新步骤变为
此解决方案在显式编程时效果很好。如何使用 scipy 的可变步长 ode 求解器来实现它?令我惊讶的是,我没有找到任何关于这个相当基本的棘手问题的文档......