![优化理论与实用算法](https://wfqqreader-1252317822.image.myqcloud.com/cover/413/46055413/b_46055413.jpg)
上QQ阅读APP看书,第一时间看更新
2.3.1 有限差分法
顾名思义,有限差分法计算两个相差有限步长的值之间的差。它利用小差分近似方程(2.4)中的导数定义:
![](https://epubservercos.yuewen.com/1510EB/25220464609634806/epubprivate/OEBPS/Images/image-024-1.jpg?sign=1739288235-E8hh00sBzvKs6jvX5VAL2y90hbWvwRfg-0-028754037c2a3590d668e79f5a59e94e)
在数学上,步长h越小,导数估计就越准确。实际上,h值太小会导致数值误差相消。这种效果将在图2.4中展示。算法2.1提供了这些方法的实现。
算法2.1 有限差分h估计函数f在x处的导数的有限差分方法
默认步长是浮点值的机器精度的平方根或立方根。这些步长平衡了机器舍入误差和步长误差。
eps函数提供了1.0和下一个较大的浮点值之间的步长。
![](https://epubservercos.yuewen.com/1510EB/25220464609634806/epubprivate/OEBPS/Images/image-p24.jpg?sign=1739288235-vhqmPIc0kcXDadQS8Yoc0Gv8h5cIeetu-0-e06890e27f461baadfea991031dfbc69)
有限差分法可以由泰勒展开式导出。我们利用f关于x的泰勒展开式,得到前向差分导数估计:
![](https://epubservercos.yuewen.com/1510EB/25220464609634806/epubprivate/OEBPS/Images/image-024-2.jpg?sign=1739288235-NwLGXojD8bwHrGFBX57WjfWPBpRRfo90-0-71ea1add24c23bfd2d0978d5715534a6)
整理并求解一阶导数:
![](https://epubservercos.yuewen.com/1510EB/25220464609634806/epubprivate/OEBPS/Images/image-024-3.jpg?sign=1739288235-qNVxkVHSmc3KOMTon2UW77sA6BQIET65-0-952d9b07a7f742890b376d2d2904b26b)
前向差分近似于小h的真正导数,其误差取决于。误差项是O(h),意味着当h接近零时,前向差分是线性误差[1]。
中心差分法的误差项为O(h2)[2]。我们可以用泰勒展开式导出这个误差项。f(x+h/2)和f(x-h/2)关于x的泰勒展开式为:
![](https://epubservercos.yuewen.com/1510EB/25220464609634806/epubprivate/OEBPS/Images/image-024-5.jpg?sign=1739288235-KmIapefiJ4haIaoxg7Ege5HPZncb2kfv-0-c83ee117ef114acf6f5975b6609fa6d6)
它们相减得到:
![](https://epubservercos.yuewen.com/1510EB/25220464609634806/epubprivate/OEBPS/Images/image-025-1.jpg?sign=1739288235-IvltKbXyxTosBUCe4ZRrUGwuw4aGZv23-0-daf0209fe1b0232628473fe9ca707034)
重新整理可以得到:
![](https://epubservercos.yuewen.com/1510EB/25220464609634806/epubprivate/OEBPS/Images/image-025-2.jpg?sign=1739288235-0h5kNvsrIKKkqrxyfSSoeM2eFXD9mc3x-0-dbdafae4267caa313f55c2dba3667c64)
这表明近似值有二次误差。
[1] 附录C讨论了渐近表示法。
[2] J. H. Mathews and K. D. Fink,Numerical Methods Using MATLAB,4th ed.Pearson,2004.