
上QQ阅读APP看书,第一时间看更新
2.3.1 有限差分法
顾名思义,有限差分法计算两个相差有限步长的值之间的差。它利用小差分近似方程(2.4)中的导数定义:

在数学上,步长h越小,导数估计就越准确。实际上,h值太小会导致数值误差相消。这种效果将在图2.4中展示。算法2.1提供了这些方法的实现。
算法2.1 有限差分h估计函数f在x处的导数的有限差分方法
默认步长是浮点值的机器精度的平方根或立方根。这些步长平衡了机器舍入误差和步长误差。
eps函数提供了1.0和下一个较大的浮点值之间的步长。

有限差分法可以由泰勒展开式导出。我们利用f关于x的泰勒展开式,得到前向差分导数估计:

整理并求解一阶导数:

前向差分近似于小h的真正导数,其误差取决于。误差项是O(h),意味着当h接近零时,前向差分是线性误差[1]。
中心差分法的误差项为O(h2)[2]。我们可以用泰勒展开式导出这个误差项。f(x+h/2)和f(x-h/2)关于x的泰勒展开式为:

它们相减得到:

重新整理可以得到:

这表明近似值有二次误差。
[1] 附录C讨论了渐近表示法。
[2] J. H. Mathews and K. D. Fink,Numerical Methods Using MATLAB,4th ed.Pearson,2004.