有限差分法

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

Template:NoteTA数学中,有限差分法finite-difference methods,簡稱FDM),是一种微分方程数值方法,是通过有限差分近似导數,从而寻求微分方程的近似解。

由泰勒展開式的推導

首先假設要近似函數的各級導數都有良好的性質,依照泰勒定理,可以形成以下的泰勒展開式

f(x0+h)=f(x0)+f(x0)1!h+f(2)(x0)2!h2++f(n)(x0)n!hn+Rn(x),

其中n!表示是n階乘Rn(x)為餘數,表示泰勒多項式和原函數之間的差。可以推導函數f一階導數的近似值:

f(x0+h)=f(x0)+f(x0)h+R1(x),

設定x0=a,可得:

f(a+h)=f(a)+f(a)h+R1(x),

除以h可得:

f(a+h)h=f(a)h+f(a)+R1(x)h

求解f'(a):

f(a)=f(a+h)f(a)hR1(x)h

假設R1(x)相當小,因此可以將"f"的一階導數近似為:

f(a)f(a+h)f(a)h.

準確度及誤差

近似解的誤差定義為近似解及解析解之間的差值。有限差分法的兩個誤差來源分別是捨入誤差截尾誤差(或稱為離散化誤差),前者是因為電腦計算小數時四捨五入造成的誤差,後者則是用有限阶级数表示导数引起的误差。

有限差分法是以在格點上函數的值為準

在運用有限差分法求解一問題(或是說找到問題的近似解)時,第一步需要將問題的定義域離散化。一般會將問題的定義域用均勻的網格分割(可參考右圖)。因此有限差分法會制造一組導數的離散數值近似值。

一般會關注近似解的Template:Link-en,會用大O符號表示,局部截尾誤差是指應用有限差分法一次後產生的誤差,因此為f(xi)f'i,此時f(xi)是實際值,而f'i為近似值。泰勒多項式的餘數項有助於分析局部截尾誤差。利用f(x0+h)泰勒多項式的餘數項,也就是

Rn(x0+h)=f(n+1)(ξ)(n+1)!(h)n+1, 其中x0<ξ<x0+h,

可以找到局部截尾誤差的主控項,例如用前項差分法計算一階導數,已知f(xi)=f(x0+ih),

f(x0+ih)=f(x0)+f(x0)ih+f(ξ)2!(ih)2,

利用一些代數的處理,可得

f(x0+ih)f(x0)ih=f(x0)+f(ξ)2!ih,

注意到左邊的量是有限差分法的近似,右邊的量是待求解的量再加上一個餘數,因此餘數就是局部截尾誤差。上述範例可以用下式表示:

f(x0+ih)f(x0)ih=f(x0)+O(h).

在此例中,局部截尾誤差和時間格點的大小成正比。

範例:常微分方程

例如考慮以下的常微分方程

u(x)=3u(x)+2.

利用數值方法中歐拉法求解,利用以下的有限差分式

u(x+h)u(x)hu(x)

來近似導數,並配合一些代數處理(等號兩側同乘以h,再加上u(x)),可得

u(x+h)=u(x)+h(3u(x)+2).

最後的方程式即為有限差分方程,求解此方程則可得到原方程的近似解。

範例:熱傳導方程

考慮正規化的一維熱傳導方程式,為齊次的狄利克雷邊界條件

Ut=Uxx
U(0,t)=U(1,t)=0(邊界條件)
U(x,0)=U0(x)(初始條件)

對此問題求數值解的一種方式是用差分去近似所有的導數,可以將空間分割為x0,...,xJ,將時間也分割為t0,....,tN。假設在時間及空間都是均勻的網格切割,空間中兩個連續位置的間隔為h,兩個連續時間之間的間隔為k。點

u(xj,tn)=ujn

表示u(xj,tn)的數值近似解。

顯式方法

熱傳導方程最常用顯式方法的Template:Link-en

利用在時間tn的前向差分,以及在位置xj的二階中央差分(Template:Link-en),可以得到以下的迭代方程:

ujn+1ujnk=uj+1n2ujn+uj1nh2.

這是用求解一維導熱傳導方程的顯式方法

可以用以下的式子求解ujn+1

ujn+1=(12r)ujn+ruj1n+ruj+1n

其中r=k/h2.

因此配合此迭代關係式,已知在時間n的數值,可以求得在時間n+1的數值。u0nuJn的數值可以用邊界條件代入,在此例中為0。

此顯式方法在r1/2時,為數值稳定收斂[1]。其數值誤差和時間間隔成正比,和位置間隔的平方成正比:

Δu=O(k)+O(h2)

隱式方法

隱式方法的模版

若使用時間tn+1的後向差分,及位置xj的二階中央差分(BTCS 格式),可以得到以下的迭代方程:

ujn+1ujnk=uj+1n+12ujn+1+uj1n+1h2.

這是用求解一維導熱傳導方程的隱式方法

在求解線性聯立方程後可以得到ujn+1

(1+2r)ujn+1ruj1n+1ruj+1n+1=ujn

此方法不論r的大小,都數值稳定且收斂,但在計算量會較顯式方法要大,因為每前進一個時間間隔,就需要求解一個聯立的數值方程組。其數值誤差和時間間隔成正比,和位置間隔的平方成正比:

Δu=O(k)+O(h2)

克兰克-尼科尔森方法

若使用時間tn+1/2的中間差分,及位置xj的二階中央差分(CTCS 格式),可以得到以下的迭代方程:

ujn+1ujnk=12(uj+1n+12ujn+1+uj1n+1h2+uj+1n2ujn+uj1nh2).

此公式為克兰克-尼科尔森方法(Crank–Nicolson method)。

克兰克-尼科尔森方法的模版

在求解線性聯立方程後可以得到ujn+1

(2+2r)ujn+1ruj1n+1ruj+1n+1=(22r)ujn+ruj1n+ruj+1n

此方法不論r的大小,都數值稳定且收斂,但在計算量會較顯式方法要大,因為每前進一個時間間隔,就需要求解一個聯立的數值方程組。其數值誤差和時間間隔的平方成正比,和位置間隔的平方成正比:

Δu=O(k2)+O(h2).

若時間刻度較小時,克兰克-尼科尔森方法是最精確的,而顯式方法是最不精確的,而且可能會不穩定,但是是最容易計算的,其數值計算量也最少。若時間刻度較大時,隱式方法的效果最好。

相關條目

參考資料

Template:Reflist

外部連結

Template:數值偏微分方程 Template:非線性偏微分方程理論與解法 Template:Authority control

  1. Crank, J. The Mathematics of Diffusion. 2nd Edition, Oxford, 1975, p. 143.