複製鏈接
請複製以下鏈接發送給好友

數值微分

鎖定
數值微分數值方法中的名詞,是用函數的值及其他已知資訊來估計一函數導數的算法
根據函數在一些離散點函數值,推算它在某點的導數或某高階導數的近似值。通常用差商代替微商,或用一能近似代替該函數的較簡單的函數(如多項式樣條函數)的相應導數作為所求導數的近似值。
中文名
數值微分
外文名
numerical differentiation
相關術語
數值積分
定    義
用函數值來估計函數導數的算法
應用學科
數學
所屬領域
數值方法

數值微分簡介

數值微分(numerical differentiation)根據函數在一些離散點函數值,推算它在某點的導數高階導數的近似值的方法。通常用差商代替微商,或者用一個能夠近似代替該函數的較簡單的可微函數(如多項式樣條函數等)的相應導數作為能求導數的近似值。例如一些常用的數值微分公式(如兩點公式、三點公式等)就是在等距步長情形下用插值多項式的導數作為近似值的。此外,還可以採用待定係數法建立各階導數的數值微分公式,並且用外推技術來提高所求近似值的精確度。當函數可微性不太好時,利用樣條插值進行數值微分要比多項式插值更適宜。如果離散點上的數據有不容忽視的隨機誤差,應該用曲線擬合代替函數插值,然後用擬合曲線的導數作為所求導數的近似值,這種做法可以起到減少隨機誤差的作用。數值微分公式還是微分方程數值解法的重要依據。

數值微分有限差分法

最簡單的方式是使用有限差分近似。 [1] 
簡單的二點估計法是計算經過(x,f(x))及鄰近點(x+h,f(x+h))二點形成割線的斜率選擇一個小的數值h,表示x的小變化,可以是正值或是負值。其斜率為
此表示法是牛頓的差商,也稱為一階均差。
割線斜率和切線斜率有些差異,差異大約和h成正比。若h近似於0,則割線斜率近似於切線斜率。因此,函數f真正在x處真正的斜率是割線趨近切線時的差商:
若直接將h用0取代會得到除以零的結果,因此計算導數需要一些較不直覺的的方式。
同様的,切線斜率也可以用(x - h)和x二點的割線斜率近似。
另外一種二點估計法是用經過(x-h,f(x-h))和(x+h,f(x+h))二點的割線,其斜率為
上述公式稱為對稱差分,其一次項誤差相消,因此割線斜率和切線斜率的差和
成正比。對於很小的h而言這個值比單邊近似還要準確。特別的是公式雖計算x點的斜率,但不會用到函數在x點的數值。
估計誤差為:
其中c為在x-h和x+h之間的某一點。此誤差沒有包括因為有限準確度而產生的舍入誤差。
很多工程計算機都是用對稱差分來計算導數,像德州儀器(TI)的TI-82、TI-83、TI-84及TI-85,其h=0.001。
雖然在實務十分常用,但上述二種方式的數值微分常被研究者批評,尤其是被一些鼓勵使用自動微分的研究者批評,因為上述的數值微分其精確度不高,若計算器精準度是六位數,用對稱差分計算導數只有三位數的精確度,而若是找到一計算斜率的函數,仍可以有幾乎六位數的精確度。例如假設f(x) = x,用2x計算斜率有幾乎完整的準確度,而用差分近似就會有上述的問題。

數值微分利用浮點數

在浮點數運算下,不同的 h造成的舍入誤差及公式誤差,只有在特定值下誤差才是最小值
若計算時使用浮點數,就需要考慮h要取到多小。若選的太小,相減之後會有大的舍入誤差,事實上整個有限差分的公式都是病態的,若h夠小,導數不為零的情形下,在相消後會得到數值微分為零的結果,若h大小,計算割線斜率的結果就會更加準確,但用割線斜率估算切線斜率的誤差就更大了。
一種可以產生夠小的h,但又不會產生舍入誤差的方式是
(不過x不能為0),其中最小浮點數ε大約是2.2×10數量級。。以下是一個一個可以平衡舍入誤差和公式誤差,有最佳精確度的h
(不過f"(x) = 0時不成立),而且需要有關函數的資訊。
上述的最小浮點數是針對雙精度(64-bit)變數,單精度變數在這類計算幾乎不太實用。其計算結果在二進制中不太可能是“整數”。雖然x是可以用浮點數表示的數字,但x+h幾乎不會也是可用浮點數表示(而且和x不同)的數字,因此x+h需調整為機器可讀的數字,因此會出現(x+h) -x不等於h的情形,因此用二個函數計算值計算微分時,二個位置的差不會是h。幾乎所有的十進制分數在二進制下都會是循環小數(都像1/3在十進制中的情形一様),例如h= 0.1在二進制下會是循環小數,是 0.000110011001100...。因此在浮點數下一個可能計算的方式是:
h:=sqrt(eps)*x; xph:=x + h; dx:=xph - x; slope:=(F(xph) - F(x))/dx;
先計算(x+h) -x的值,再用這個值作為微分算式的分母,不過若是用電腦計算,編譯器最優化的機能可能會認為dxh相同,因此讓上述的方式失效。若是用C或其他類似的編程語言,可以讓xph宣告成Volatile變量,以避免此一問題。

數值微分高階方法

也有用更高階估計導數的方法,或是估計高階導數的方法。
以下就是一階導數的五點法(一維下的五點模版)
其中

數值微分微分求積

微分求積(Differential quadrature)是用函數在特定位置數值的加權和來近似導數, [2]  其名稱類似數值積分中用的求積(quadrature),也就是像梯形法或是辛普森法中用的加權和,有許多方式可找出加權的係數,在求解偏微分方程時會用到微分求積。

數值微分復變的方法

傳統用有限差分近似數值微分的方式是病態的,不過若f是全純函數,在實軸上的值都是實數,可以用複平面中靠近 x的位置來求值,此方式為數值穩定的方式,例如一階導數可以用以下的複數導數公式計算:
上述公式只在計一階導數時有效,若要拓展到任意階導數,需要用到多重複數,結果也會是多重複數的導數。
而任意階的導數可以用柯西積分公式計算:
其中積分會用數值積分計算。
Lyness和Moler在1967年提出用復變數來計算數值微分。Abate和Dubner提出一種用複數拉普拉斯轉換的數值反演為基礎的算法。 [3] 
參考資料
  • 1.    Richard L. Burden, J. Douglas Faires (2000), Numerical Analysis, (7th Ed), Brooks/Cole. ISBN 0-534-38216-9
  • 2.    Differential Quadrature and Its Application in Engineering: Engineering Applications, Chang Shu, Springer, 2000, ISBN 978-1-85233-209-9
  • 3.    Abate, J; Dubner, H. A New Method for Generating Power Series Expansions of Functions. SIAM J. Numer. Anal. March 1968, 5 (1): 102–112.