我必须对具有以下形式的 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_i
和g_i
是给定的函数, 和j = -N,..N
。这是一个初值问题,任务是在某个时间找到解决方案T
。
如果,则可以独立求解g_i(t) = h_i(t) = 0
不同 值的方程。j
在这种情况下,我借助四阶 Runge-Kutta 方法获得了稳定且准确的解。然而,一旦我打开耦合,结果就时间网格步长和函数的显式形式而言变得非常不稳定g_i
,h_i
。
我想尝试使用隐式 Runge-Kutta 方案是合理的,在这种情况下它可能是稳定的,但如果我这样做,我将不得不评估一个巨大的 size 矩阵的逆矩阵4*N*c
,其中c
取决于顺序每个步骤的方法(例如c = 3
,对于 Gauss-Legendre 方法)。当然,该矩阵将主要包含零并具有块三对角形式,但它似乎仍然非常耗时。
所以我有两个问题:
g_i
有没有一种稳定的显式方法,即使在耦合函数h_i
(非常)大的情况下也能工作?如果隐式方法确实是一个很好的解决方案,那么最快的块三对角矩阵求逆方法是什么?目前我只是执行一个简单的高斯方法,避免由于矩阵的特定结构而出现的冗余操作。
可能对我们有帮助的其他信息和详细信息:
我使用 Fortran 95。
我目前考虑
g_1(t) = h_1(t) = g_2(t) = h_2(t) = -iAF(t)sin(omega*t)
,其中i
是虚数单位,A
并且omega
给定常数,并且F(t)
是一个平滑的包络线,首先从 0 到 1,然后从 1 到 0,所以F(0) = F(T) = 0
。最初
u_j = v_j = 0
除非j = 0
. 绝对值很大的函数u_j
和对所有 来说都非常小,因此初始峰值不会到达“边界”。v_j
j
t