2016-08-16 74 views
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)是復值的時間t標量函數,f_ig_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)。當然,矩陣將大部分包含零並且具有塊三對角形式,但它似乎仍然非常耗時。

所以我有兩個問題:

  1. 有其工作的穩定明確的方法即使是在連接功能g_i和​​是(非常)大?

  2. 如果一個隱式方法確實是一個好的解決方案,塊三對角矩陣反演的最快方法是什麼?目前我只是執行簡單的高斯方法,避免了由於矩陣的特定結構而產生的冗餘操作。

附加信息和細節,可以幫助我們:

  • 我使用的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。對於所有t而言,絕對值爲j的函數u_jv_j對於所有的t來說都是非常小的,所以初始峯值沒有達到「邊界」。

回答