顯式和隱式方法

来自testwiki
跳转到导航 跳转到搜索

顯式方法(explicit method)和隱式方法(implicit methods)是数值分析中計算以時間為自變數的常微分方程偏微分方程的數值近似法,也是偏微分方程计算机模拟會使用的方法。顯式方法會用系統目前的狀態來計算下一個時間的狀態,隱式方法會將系統目前狀態和下一個時間的狀態以方程式的方式表示,下一個時間的狀態為未知數,求解方程式來得到下一個時間的狀態。考慮數學的型式,若Y(t)是目前系統狀態,Y(t+Δt)是下一個時間的狀態(Δt是很小的時間間隔),在顯式方法下,下一個時間的狀態為

Y(t+Δt)=F(Y(t))

在隱式方法下,下一個時間的狀態可用以下方程來表示

G(Y(t),Y(t+Δt))=0(1)

需求解方程才能得到下一個時間的狀態。

隱式方法需要針對方程式求解,需要額外的計算,也比較不容易實現。顯式方法比較容易實現,但許多問題屬於刚性方程,為了要使其誤差限制在一定範圍內(和数值稳定性有關),需要非常小的Δt。這類的問題,若要得到相同的精度,可以用隱式方法,選取較大的時間間隔,就算將隱式方法需要在每一步針對方程式(1)的求解考慮在內,隱式方法仍可以在較少的運算量下得到結果。因此,要用隱式方法或是顯式方法求解需視問題而定。隱式方法無法用在每一種微分運算子上,因此有時會用所謂的運算子分離法(operator splitting method),將微分算子改寫為兩種互補算子的結合

Y(t+Δt)=F(Y(t+Δt))+G(Y(t)),

一個是顯式的,另一個則是隱式的。 一般的應用會讓隱式項是線性的,而顯式項可以為非線性。這種組合稱為「隱式-顯式方法」(Implicit-Explicit Method),簡稱IMEX[1][2]

用前向歐拉方法和後向歐拉方法的說明

考慮常微分方程

dydt=y2, t[0,a](2)

初始條件是y(0)=1。考慮格點tk=akn,0 ≤ k ≤ n,意思是,時間間隔是Δt=a/n,,且yk=y(tk)。用最簡單的顯式和隱式方法將此方程式离散化,分別是「前向歐拉方法」及「後向歐拉方法」,並且比較其差異。

前向歐拉方法
用不同的積分法所得的結果y=y2,t[0,5],y0=1Δt=5/10.

前向欧拉方法

(dydt)kyk+1ykΔt=yk2

可得

yk+1=ykΔtyk2(3)

對所有k=0,1,,n.,這是yk+1的顯式公式。

後向歐拉方法

Template:Le

yk+1ykΔt=yk+12

可以得到yk+1的隱式方程

yk+1+Δtyk+12=yk

比較上式和公式(3),公式(3)的yk+1可以直接求得,而此處是方程式中的未知數,需要求解。

這是一元二次方程,有一個正和一個負根,因為其初值為正,選擇其正根,則下一步的y

yk+1=1+1+4Δtyk2Δt.(4)

大部份的隱式方程中,要求解的方程會比一元二次方程複雜的多,也有可能不存在解析解,因此需要用其他求根算法(例如牛顿法)來求得數值解。

克兰克-尼科尔森方法

克兰克-尼科尔森方法

yk+1ykΔt=12yk+1212yk2

可以求得yk+1的隱式方程

yk+1+12Δtyk+12=yk12Δtyk2

這可以用求根算法(例如牛顿法)來求得yk+1的數值解。

克兰克-尼科尔森方法可以視為是通用的IMEX(Implicit-Explicit,隱式-顯式)架構。

前向-後向歐拉方法
用前向歐拉方法以及前向-後向歐拉方法,在a=5n=30下的結果

為了應用IMEX架構,考慮另一個微分方程:

dydt=yy2, t[0,a](5)

可以得到

(dydt)kyk+1yk2, t[0,a]

因此

yk+1=yk(1ykΔt)1Δt(6)

針對k=0,1,,n

相關條目

來源

Template:Reflist

  1. U.M. Ascher, S.J. Ruuth, R.J. Spiteri: Implicit-Explicit Runge-Kutta Methods for Time-Dependent Partial Differential Equations Template:Wayback, Appl Numer Math, vol. 25(2-3), 1997
  2. L.Pareschi, G.Russo: Implicit-Explicit Runge-Kutta schemes for stiff systems of differential equations, Recent Trends in Numerical Analysis, Vol. 3, 269-289, 2000