![优化理论与实用算法](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=1738955409-GMlvaSYfHLJrx6bxkeiY260NdGZTCvSB-0-863b4465ae17f69b0316341d82a6c160)
在数学上,步长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=1738955409-nHrRPrzbyr3xHnN2XIiDqIYs9hkWds7C-0-df8663f7cfa8a8c27d9abd4c5cabb8c8)
有限差分法可以由泰勒展开式导出。我们利用f关于x的泰勒展开式,得到前向差分导数估计:
![](https://epubservercos.yuewen.com/1510EB/25220464609634806/epubprivate/OEBPS/Images/image-024-2.jpg?sign=1738955409-7WCGG0w6NCSaz8k52czNssKQXqxiuXPW-0-52f133a00633eab7c1877ca0a96041ff)
整理并求解一阶导数:
![](https://epubservercos.yuewen.com/1510EB/25220464609634806/epubprivate/OEBPS/Images/image-024-3.jpg?sign=1738955409-Gyfu3nB6lkUtVsBjSJ2UfMg476KKcOwV-0-065bb26c426cf95e3027c016463d9edc)
前向差分近似于小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=1738955409-ZqvxRV4Mhcl3bZD90BlVxf3HwFsYtesR-0-79b40d8248866fd540943bdb93372c07)
它们相减得到:
![](https://epubservercos.yuewen.com/1510EB/25220464609634806/epubprivate/OEBPS/Images/image-025-1.jpg?sign=1738955409-2EOQXKDrPSIispkabBdmKlYjR64nrIm2-0-528e669ea3b6898975cbd4a83d1c8cac)
重新整理可以得到:
![](https://epubservercos.yuewen.com/1510EB/25220464609634806/epubprivate/OEBPS/Images/image-025-2.jpg?sign=1738955409-5pdRJtZRhpvk4EI4lYCV2jlt3qEo8NYM-0-b22e583744eebe22f22f23b471fec199)
这表明近似值有二次误差。
[1] 附录C讨论了渐近表示法。
[2] J. H. Mathews and K. D. Fink,Numerical Methods Using MATLAB,4th ed.Pearson,2004.