我必须对具有以下形式的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方案是合理的,在这种情况下可能是稳定的,但如果我这样做,我将不得不评估一个大的矩阵{{1其中4*N*c
取决于方法的顺序(例如,高斯 - 勒让德方法的c
)。当然,矩阵主要包含零并且具有三对角形式的块,但它看起来仍然非常耗时。
所以我有两个问题:
是否有一个稳定的显式方法,即使耦合函数c = 3
和g_i
非常大,也能正常工作?
如果隐式方法确实是一个很好的解决方案,那么块三对角矩阵的反转最快的方法是什么?目前我只是执行一个简单的高斯方法,避免由于矩阵的特定结构而产生的冗余操作。
可能对我们有帮助的其他信息和详细信息:
我使用的是Fortran 95。
我目前考虑h_i
,其中g_1(t) = h_1(t) = g_2(t) = h_2(t) = -iAF(t)sin(omega*t)
是虚数单位,i
和A
是常数,omega
是平滑的信封缓慢移动,首先是0到1,然后是1到0,所以F(t)
。
最初F(0) = F(T) = 0
除非u_j = v_j = 0
。绝对值j = 0
的绝对值u_j
和v_j
对于所有j
都非常小,因此初始峰值不会达到"边界"
答案 0 :(得分:0)
To 1)如果函数非常大,将没有稳定的显式方法。这是因为显式(Runge-Kutta)方法的稳定性区域是紧凑的。
要2)如果您的矩阵大于100x100,您可以使用此方法: Inverses of Block Tridiagonal Matrices and Rounding Errors