顯式方法(explicit method)和隱式方法(implicit methods)是數值分析中計算以時間為自變數的常微分方程和偏微分方程的數值近似法,也是偏微分方程中計算機模擬會使用的方法。顯式方法會用系統目前的狀態來計算下一個時間的狀態,隱式方法會將系統目前狀態和下一個時間的狀態以方程式的方式表示,下一個時間的狀態為未知數,求解方程式來得到下一個時間的狀態。考慮數學的型式,若
是目前系統狀態,
是下一個時間的狀態(
是很小的時間間隔),在顯式方法下,下一個時間的狀態為
![{\displaystyle Y(t+\Delta t)=F(Y(t))\,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/4d72c127fbdfdfd3b11386bcc2e8b1672b59e8c4)
在隱式方法下,下一個時間的狀態可用以下方程來表示
![{\displaystyle G{\Big (}Y(t),Y(t+\Delta t){\Big )}=0\qquad (1)\,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/3e5330e3b71d7ad310f18f2eeb4412429e873228)
需求解方程才能得到下一個時間的狀態。
隱式方法需要針對方程式求解,需要額外的計算,也比較不容易實現。顯式方法比較容易實現,但許多問題屬於剛性方程,為了要使其誤差限制在一定範圍內(和數值穩定性有關),需要非常小的
。這類的問題,若要得到相同的精度,可以用隱式方法,選取較大的時間間隔,就算將隱式方法需要在每一步針對方程式(1)的求解考慮在內,隱式方法仍可以在較少的運算量下得到結果。因此,要用隱式方法或是顯式方法求解需視問題而定。隱式方法無法用在每一種微分運算子上,因此有時會用所謂的運算子分離法(operator splitting method),將微分算子改寫為兩種互補算子的結合
![{\displaystyle Y(t+\Delta t)=F(Y(t+\Delta t))+G(Y(t)),\,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/ed85c7aec208d36ec5081ed6e32951a273cafa61)
一個是顯式的,另一個則是隱式的。
一般的應用會讓隱式項是線性的,而顯式項可以為非線性。這種組合稱為「隱式-顯式方法」(Implicit-Explicit Method),簡稱IMEX[1][2]。
用前向歐拉方法和後向歐拉方法的說明[編輯]
考慮常微分方程
![{\displaystyle {\frac {dy}{dt}}=-y^{2},\ t\in [0,a]\quad \quad (2)}](https://wikimedia.org/api/rest_v1/media/math/render/svg/2da9a469600ad22b47c72ac29e5705592594d712)
初始條件是
。考慮格點
,0 ≤ k ≤ n,意思是,時間間隔是
,且
。用最簡單的顯式和隱式方法將此方程式離散化,分別是「前向歐拉方法」及「後向歐拉方法」,並且比較其差異。
- 前向歐拉方法
用不同的積分法所得的結果
,
.
前向歐拉方法
![{\displaystyle \left({\frac {dy}{dt}}\right)_{k}\approx {\frac {y_{k+1}-y_{k}}{\Delta t}}=-y_{k}^{2}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/fb190a30c0d2c1c54ecce5c90f6c4fc47f230be9)
可得
![{\displaystyle y_{k+1}=y_{k}-\Delta ty_{k}^{2}\quad \quad \quad (3)\,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/b24c1b94912ed9ce399e525cb2515d99919eeac0)
對所有
,這是
的顯式公式。
- 後向歐拉方法
用後向歐拉方法
![{\displaystyle {\frac {y_{k+1}-y_{k}}{\Delta t}}=-y_{k+1}^{2}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/c6880005e4edbd152fb000fccf08402598f796aa)
可以得到
的隱式方程
![{\displaystyle y_{k+1}+\Delta ty_{k+1}^{2}=y_{k}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/1a532577bd507992b1e907a4e6f4a0e8c8cf28a5)
比較上式和公式(3),公式(3)的
可以直接求得,而此處是方程式中的未知數,需要求解。
這是一元二次方程,有一個正根和一個負根,因為其初值為正,選擇其正根,則下一步的
為
![{\displaystyle y_{k+1}={\frac {-1+{\sqrt {1+4\Delta ty_{k}}}}{2\Delta t}}.\quad \quad (4)}](https://wikimedia.org/api/rest_v1/media/math/render/svg/ddf2b7fddb89a94238e60b7939ecdb8eb05531ec)
大部份的隱式方程中,要求解的方程會比一元二次方程複雜的多,也有可能不存在解析解,因此需要用其他求根算法(例如牛頓法)來求得數值解。
- 克蘭克-尼科爾森方法
用克蘭克-尼科爾森方法
![{\displaystyle {\frac {y_{k+1}-y_{k}}{\Delta t}}=-{\frac {1}{2}}y_{k+1}^{2}-{\frac {1}{2}}y_{k}^{2}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/019284e0f6b33ff47d19feb46069558e988cd04a)
可以求得
的隱式方程
![{\displaystyle y_{k+1}+{\frac {1}{2}}\Delta ty_{k+1}^{2}=y_{k}-{\frac {1}{2}}\Delta ty_{k}^{2}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/497a8ceb9bb75e9578d6feb65e2bbe3616060fec)
這可以用求根算法(例如牛頓法)來求得
的數值解。
克蘭克-尼科爾森方法可以視為是通用的IMEX(Implicit-Explicit,隱式-顯式)架構。
- 前向-後向歐拉方法
用前向歐拉方法以及前向-後向歐拉方法,在
和
下的結果
為了應用IMEX架構,考慮另一個微分方程:
![{\displaystyle {\frac {dy}{dt}}=y-y^{2},\ t\in [0,a]\quad \quad (5)}](https://wikimedia.org/api/rest_v1/media/math/render/svg/f18ea769b80c985190a3cdd00aab67ab5e172ee8)
可以得到
![{\displaystyle \left({\frac {dy}{dt}}\right)_{k}\approx y_{k+1}-y_{k}^{2},\ t\in [0,a]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/7b04b3efd989e303c961793557c8ace14d9ab2d5)
因此
![{\displaystyle y_{k+1}={\frac {y_{k}(1-y_{k}\Delta t)}{1-\Delta t}}\quad \quad (6)}](https://wikimedia.org/api/rest_v1/media/math/render/svg/eef25f7d9bc8b0be8de4a9750c6923557d7b1de3)
針對
相關條目[編輯]
- ^ U.M. Ascher, S.J. Ruuth, R.J. Spiteri: Implicit-Explicit Runge-Kutta Methods for Time-Dependent Partial Differential Equations (頁面存檔備份,存於互聯網檔案館), Appl Numer Math, vol. 25(2-3), 1997
- ^ 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