我必須執行其具有如下形式的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
,。
我認爲嘗試使用隱式Runge-Kutta方案是合理的,這種方法在這種情況下可能是穩定的,但如果我這樣做,我將不得不評估一個大小爲4*N*c
的矩陣的逆,其中c
取決於該方法的順序(例如用於高斯 - 勒讓德方法的c = 3
)。當然,矩陣將大部分包含零並且具有塊三對角形式,但它似乎仍然非常耗時。
所以我有兩個問題:
有其工作的穩定明確的方法即使是在連接功能
g_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
。對於所有t
而言,絕對值爲j
的函數u_j
和v_j
對於所有的t
來說都是非常小的,所以初始峯值沒有達到「邊界」。