首页 文章

ODE系统的数值稳定性

提问于
浏览
2

我必须对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) 是复数值标量函数的时间 tf_ig_i 被赋予函数, j = -N,..N . 这是一个初始值问题,任务是在某个时间找到解决方案 T .

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

我想尝试使用隐式Runge-Kutta方案是合理的,在这种情况下这可能是稳定的,但如果我这样做,我将不得不评估一个巨大的矩阵 4*N*c 的倒数,其中 c 依赖于每个步骤的方法顺序(例如,高斯 - 勒让德方法的 c = 3 ) . 当然,矩阵将主要包含零并具有块三对角形式,但它似乎仍然非常耗时 .

所以我有两个问题:

  • 是否有一个稳定的显式方法,即使耦合函数 g_ih_i (非常)很大时也能正常工作?

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

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

  • 我使用Fortran 95 .

  • 我目前正在考虑 g_1(t) = h_1(t) = g_2(t) = h_2(t) = -iAF(t)sin(omega*t) ,其中 i 是虚数单位, Aomega 是常数,而 F(t) 是一个平缓的包络,首先是0到1,然后是1到0,所以 F(0) = F(T) = 0 .

  • 最初 u_j = v_j = 0 除非 j = 0 . 绝对值 j 的函数 u_jv_j 对于所有 t 都非常小,因此初始峰值不会达到"boundaries" .

1 回答

  • 0

    要1)如果你的函数很大,就没有稳定的显式方法 . 这是因为显式(Runge-Kutta)方法的稳定性区域是紧凑的 .

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

相关问题