數值微分是數值方法中的名詞，是用函式的值及其他已知資訊來估計一函式導數的演演算法。 有限差分法 最簡單的方式是使用有限差分近似。 簡單的二點估計法是計算經過 xf x 及鄰近點 xhf xh 二點形成割線的斜率 Richard L Burden J Douglas Faires 2000 Numerical Analysis 7th Ed BrooksCole ISBN 0534382169 選擇一個小的數值 h，表示 x 的小變化，可以是正值或是負值。其斜率為 f xhf xover h 此表示法是牛頓的差商，也稱為一階均差。 割線斜率和切線斜率有些差異，差異大約和 h 成正比。若 h 近似於 0，則割線斜率近似於切線斜率。因此，函式 f 真正在 x 處真正的斜率是割線趨近切線時的差商： fxlim_hto 0f xhf xover h 若直接將 h 用 0 取代會得到除以零的結果，因此計算導數需要一些較不直覺的的方式。 同様的，切線斜率也可以用 x h 和 x 二點的割線斜率近似。 另外一種二點估計法是用經過 xhf xh 和 xhf xh 二點的割線，其斜率為 f xhf xhover 2h 上述公式稱為對稱差分，其一次項誤差相消，因此割線斜率和切線斜率的差和 h2 成正比。對於很小的 h 而言這個值比單邊近似還要準確。特別的是公式雖計算 x 點的斜率，但不會用到函式在 x 點的數值。 估計誤差為： R f3cover 6 h2 其中 c 為在 xh 和 xh 之間的某一點。此誤差沒有包括因為有限準確度而產生的捨入誤差。 很多工程計算機都是用對稱差分來計算導數，像德州儀器（TI）的 TI82、TI83、TI84 及 TI85，其 h0001。 雖然在實務十分常用，但上述二種方式的數值微分常被研究者批評，尤其是被一些鼓勵使用自動微分的研究者批評，因為上述的數值微分其精確度不高，若計算器精準度是六位數，用對稱差分計算導數只有三位數的精確度，而若是找到一計算斜率的函式，仍可以有幾乎六位數的精確度。例如假設 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，但又不會產生捨入誤差的方式是 sqrt varepsilon x（不過 x 不能為 0），其中 ε 大約是 221016 數量級。 Following Numerical Recipes in C Chapter 57 。以下是一個一個可以平衡捨入誤差和公式誤差，有最佳精確度的 h 為 h 2sqrt varepsilonf xover f x p 263 （不過 fx 0 時不成立），而且需要有關函式的資訊。 上述的最小浮點數是針對雙精度（64bit）變數，單精度變數在這類計算幾乎不太實用。其計算結果在二進制中不太可能是「整數」。雖然 x 是可以用浮點數表示的數字，但 x h 幾乎不會也是可用浮點數表示（而且和 x 不同）的數字，因此 x h 需調整為機器可讀的數字，因此會出現 x h x 不等於 h 的情形，因此用二個函式計算值計算微分時，二個位置的差不會是 h。幾乎所有的十進位制分數在二進位制下都會是迴圈小數（都像 13 在十進制中的情形一様），例如 h 01 在二進位制下會是迴圈小數，是 0000110011001100。因此在浮點數下一個可能計算的方式是： hsqrt epsx xphx h dxxph x slopeF xph F xdx 先計算 x h x 的值，再用這個值作為微分算式的分母，不過若是用電腦計算，編譯器最佳化的機能可能會認為 dx 和 h 相同，因此讓上述的方式失效。若是用 C 或其他類似的程式語言，可以讓 xph 宣告成 Volatile 變數，以避免此一問題。 高階方法 也有用更高階估計導數的方法，或是估計高階導數的方法。 以下就是一階導數的五點法（一維下的）Abramowitz Stegun Table 252 fx frac f x2 h8 f xh8 f xhf x2h12 hfrac h430 f5c 其中 cin x2hx2h 微分求積 （Differential quadrature）是用函式在特定位置數值的加權和來近似導數 Differential Quadrature and Its Application in Engineering Engineering Applications Chang Shu Springer 2000 ISBN 9781852332099Advanced Differential Quadrature Methods Yingyan Zhang CRC Press 2009 ISBN 9781420082487，其名稱類似數值積分中用的求積（quadrature），也就是像梯形法或是辛普森法中用的加權和，有許多方式可找出加權的係數，在求解偏微分方程時會用到微分求積。 複變的方法 傳統用有限差分近似數值微分的方式是病態的，不過若 f 是全純函式，在實軸上的值都是實數，可以用複數平面中靠近 x 的位置來求值，此方式為數值穩定的方式，例如一階導數可以用以下的複數導數公式計算： fxapprox Im f x ihh 上述公式只在計一階導數時有效，若要拓展到任意階導數，需要用到多重複數，結果也會是多重複數的導數。 而任意階的導數可以用柯西積分公式計算： fna n over 2pi i oint_gamma f z over zan1 mathrm d z 其中積分會用數值積分計算。 Lyness 和 Moler 在 1967 年提出用複變數來計算數值微分。Abate 和 Dubner 提出一種用複數拉普拉斯轉換的數值反演為基礎的演算法。 參考資料 相關條目 自動微分 差分 數值積分 外部連結 httpmathworldwolframcomNumericalDifferentiationhtml httpswebarchiveorgweb20130820223117httpmathfullertonedumathewsn2003NumericalDiffModhtml Numerical Differentiation Resources Textbook notes PPT Worksheets Audiovisual YouTube Lectures at Numerical Methods for STEM Undergraduate ftpmathnistgovpubrepositorydiffsrcDIFF Fortran code for the numerical differentiation of a function using Nevilles process to extrapolate from a sequence of simple polynomial approximations NAG Library numerical differentiation routines httpgraphulatorcom Online numerical graphing calculator with calculus function Category 數值分析 Category 微分學