ODE系统的数值稳定性

时间:2016-08-16 22:13:24

标签: numerical-methods ode runge-kutta numerical-stability

我必须对具有以下形式的ODE系统进行数值求解:

du_j/dt = f_1(u_j, v_j, t) + g_1(t)v_(j-1) + h_1(t)v_(j+1),

dv_j/dt = f_2(u_j, v_j, t) + g_2(t)u_(j-1) + h_2(t)u_(j+1),

其中u_j(t)v_j(t)是时间t的复数值标量函数,f_ig_i被赋予函数,j = -N,..N 。这是一个初始值问题,任务是在特定时间T找到解决方案。

如果g_i(t) = h_i(t) = 0,那么j的不同值的等式可以独立求解。在这种情况下,我借助于四阶Runge-Kutta方法获得了稳定和精确的解。但是,一旦我打开耦合,结果就时间网格步骤和函数g_ih_i的显式形式变得非常不稳定。

我想尝试使用隐式Runge-Kutta方案是合理的,在这种情况下可能是稳定的,但如果我这样做,我将不得不评估一个大的矩阵{{1其中4*N*c取决于方法的顺序(例如,高斯 - 勒让德方法的c)。当然,矩阵主要包含零并且具有三对角形式的块,但它看起来仍然非常耗时。

所以我有两个问题:

  1. 是否有一个稳定的显式方法,即使耦合函数c = 3g_i非常大,也能正常工作?

  2. 如果隐式方法确实是一个很好的解决方案,那么块三对角矩阵的反转最快的方法是什么?目前我只是执行一个简单的高斯方法,避免由于矩阵的特定结构而产生的冗余操作。

  3. 可能对我们有帮助的其他信息和详细信息:

    • 我使用的是Fortran 95。

    • 我目前考虑h_i,其中g_1(t) = h_1(t) = g_2(t) = h_2(t) = -iAF(t)sin(omega*t)是虚数单位,iA是常数,omega是平滑的信封缓慢移动,首先是0到1,然后是1到0,所以F(t)

    • 最初F(0) = F(T) = 0除非u_j = v_j = 0。绝对值j = 0的绝对值u_jv_j对于所有j都非常小,因此初始峰值不会达到"边界"

1 个答案:

答案 0 :(得分:0)

To 1)如果函数非常大,将没有稳定的显式方法。这是因为显式(Runge-Kutta)方法的稳定性区域是紧凑的。

要2)如果您的矩阵大于100x100,您可以使用此方法: Inverses of Block Tridiagonal Matrices and Rounding Errors