数值微分的算法

本章涉及知识点

1、求解函数导数存在的问题

2、泰勒展开式的推导

3、幂级数展开求解数值导数

4、案例演示

一、求解函数导数存在的问题

导数反应了函数f(x)的变化率,而f(x)在某一点处的导数值就表示f(x)在该点的增量。在现代神经网络的数学模型中,求解各个神经元权重的偏导数值来反向更新神经网络中各个权重从而减少误差的算法,被称之为反向传播算法

而和求解定积分问题一样,我们不得不面对如果f(x)的表达式非常复杂,将会使得用求导法则推导导数的表达式变得非常困难,并且计算机也不擅长数学中的求导法则,为此我们任然需要换一个角度来求解导数值

二、泰勒展开式的推导

对于一些较为复杂的函数,为了方便研究,我们希望可以用一些简单的函数来近似表达f(x),而由于用多项式表示的函数,只要对自变量进行有限次加、减、乘三种算数运算,就可以快速的求解出f(x)的函数值,基于这个思路,我们经常用多项式来近似表达逼近f(x)

于是问题抽象为:f(x)在开区间内具有n+1阶导数,试找出一个关于x-x0的n次多项式

关于x-x0的n次多项式

来近似逼近f(x),并且pn(x)与f(x)的误差是关于x-x0的高阶无穷小

讨论该问题,假设pn(x)在x0处的函数值以及pn(x)到n阶的导数在x0的值依次和f(x)的n阶导数相等,即满足

多项式满足关系

分析当n=1时

n=1时

求导为

p1的1阶导数

当n=2时

n=2时

求导为

p2的2阶导数

当n=3时

n=3时

求导为

数值微分的算法_第1张图片
p3的3阶导数

当n=n时,可以归纳为

pn的n阶导数

依次求出多项式待定系数a0,a1,...an

数值微分的算法_第2张图片
多项式待定系数

则我们的抽象问题可以表示为

f(x)的多项式近似逼近

上式即是f(x)的泰勒展开式的推导,而其更准确的定义为

泰勒展开式

其中f(x)的误差Rn为

f(x)的误差Rn

三、幂级数展开求解数值导数

有了上述泰勒展开式的知识,我们来推导用幂级数展开来求解数值导数的算法

我们假设

两个区间值

由泰勒展开式可得f(x0+h)和f(x0-h)的表达式为

f(x0+h)的表达式
f(x0-h)的表达式

联立上述两个式子相减并同时除以2h,得

f(x0)的导数值推导

为此,我们得到了幂级数展开后的导数值求解算法,将其定义为

幂级数展开的导数值求解算法

其中误差项为

幂级数展开的误差项

四、案例演示

有了幂级数展开求解导数值的算法,我们来尝试计算案例函数在x=2处的导数值

案例函数

我们实验不同的步长为

实验不同的步长列表
幂级数展开求解导数值算法

最后我们用数学求导法则求出f(x)的导函数,作为验证幂级数算法的依据

案例函数的导函数

实验结果为

数值微分的算法_第3张图片
实验结果

从结果上可以看到,较小的h不一定有得到较好的结果,而由于四舍五入,实际得到的误差不一定符合误差理论,当h取得适当的值时,导数值近似逼近的结果已经非常接近理论结果

案例代码见:数值微分的算法

你可能感兴趣的:(数值微分的算法)