數值微分

數值微分是數值方法中的名詞，是用函數的值及其他已知資訊來估計一函數導數的演算法。

230px|right

有限差分法
最簡單的方式是使用有限差分近似。

簡單的二點估計法是計算經過(x,f(x))及鄰近點(x+h,f(x+h))二點形成割線的斜率Richard L. Burden, J. Douglas Faires (2000), Numerical Analysis, (7th Ed),  Brooks/Cole. ISBN 0-534-38216-9選擇一個小的數值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點的數值。

估計誤差為：

,

其中為在和之間的某一點。此誤差沒有包括因為有限準確度而產生的捨入誤差。

很多工程計算機都是用對稱差分來計算導數，像德州儀器（TI）的TI-82、TI-83、TI-84及TI-85，其h=0.001。

雖然在實務十分常用，但上述二種方式的數值微分常被研究者批評，尤其是被一些鼓勵使用自動微分的研究者批評，因為上述的數值微分其精確度不高，若計算器精準度是六位數，用對稱差分計算導數只有三位數的精確度，而若是找到一計算斜率的函數，仍可以有幾乎六位數的精確度。例如假設f(x) = x2，用2x計算斜率有幾乎完整的準確度，而用差分近似就會有上述的問題。

利用浮點數的實際考量

若計算時使用浮點數，就需要考慮h要取到多小。若選的太小，相減之後會有大的捨入誤差，事實上整個有限差分的公式都是病態的Numerical Differentiation of Analytic Functions, B Fornberg - ACM Transactions on Mathematical Software (TOMS), 1981，若h夠小，導數不為零的情形下，在相消後會得到數值微分為零的結果Using Complex Variables to Estimate Derivatives of Real Functions, W Squire, G Trapp - SIAM REVIEW, 1998，若h太大，計算割線斜率的結果就會更加準確，但用割線斜率估算切線斜率的誤差就更大了。

一種可以產生夠小的h，但又不會產生捨入誤差的方式是（不過x不能為0），其中ε大約是2.2×10−16數量級。
Following Numerical Recipes in C, Chapter 5.7 。以下是一個一個可以平衡捨入誤差和公式誤差，有最佳精確度的h為

p. 263  
（不過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的值，再用這個值作為微分算式的分母，不過若是用電腦計算，編譯器最佳化的機能可能會認為dx和h相同，因此讓上述的方式失效。若是用C或其他類似的程式語言，可以讓xph宣告成Volatile变量，以避免此一問題。

高階方法

也有用更高階估計導數的方法，或是估計高階導數的方法。

以下就是一階導數的五點法（一維下的五點模版）Abramowitz & Stegun, Table 25.2

其中.

微分求积
（Differential quadrature）是用函數在特定位置數值的加權和來近似導數Differential Quadrature and Its Application in Engineering: Engineering Applications, Chang Shu, Springer, 2000, ISBN 978-1-85233-209-9Advanced Differential Quadrature Methods, Yingyan Zhang, CRC Press, 2009, ISBN 978-1-4200-8248-7，其名稱類似數值積分中用的求积（quadrature），也就是像梯形法或是辛普森法中用的加權和，有許多方式可找出加權的係數，在求解偏微分方程時會用到微分求积。

複變的方法
傳統用有限差分近似數值微分的方式是病態的，不過若是全純函數，在實軸上的值都是實數，可以用複數平面中靠近的位置來求值，此方式為數值穩定的方式，例如一階導數可以用以下的複數導數公式計算：

.

上述公式只在計一階導數時有效，若要拓展到任意階導數，需要用到多重复数，結果也會是多重复数的導數。

而任意階的導數可以用柯西積分公式計算：
,
其中積分會用數值積分計算。

Lyness和Moler在1967年提出用複變數來計算數值微分。Abate和Dubner提出一種用複數拉普拉斯轉換的數值反演為基礎的算法。

參考資料

相關條目
自動微分
差分

數值積分
數值常微分方程

 外部連結 
 http://mathworld.wolfram.com/NumericalDifferentiation.html 
 https://web.archive.org/web/20130820223117/http://math.fullerton.edu/mathews/n2003/NumericalDiffMod.html
Numerical Differentiation Resources: Textbook notes, PPT, Worksheets, Audiovisual YouTube Lectures at Numerical Methods for STEM Undergraduate
ftp://math.nist.gov/pub/repository/diff/src/DIFF Fortran code for the numerical differentiation of a function using Neville's process to extrapolate from a sequence of simple polynomial approximations.
 NAG Library numerical differentiation routines 
 http://graphulator.com  Online numerical graphing calculator with calculus function. 

Category:数值分析
Category:微分学