分享

从牛顿插值法到泰勒公式

 mzsm 2019-05-13
在17、18世纪,由于天文、航海的发展,数学一个很重要的问题就是插值。
什么叫插值? 插值是数学领域数值分析中的通过已知的离散数据求未知数据的过程或方法。
听起来很抽象?没关系,我们来看下具体的问题。
比如天文学家开普勒观察火星运行之后记录(下列数字纯属虚构):
  • 周一,火星距离太阳3万公里
  • 周二,火星距离太阳6万公里
  • 周三,雾霾,没有观测数据
  • 周四,火星距离太阳5万公里
  • 周五,火星距离太阳7万公里
要想知道周三的数据,我们先把这个数据变得数学一些:
  • x=1y=3
  • x=2y=6
  • x=4y=5
  • x=5y=7
x=3时,y=?
这个题怎么做?
1 插值
根据常识,火星一定是连续运动的,会形成一个运动轨迹。而我们现在已知的4个点,必定在这个运动轨迹上。
所以根据这4个点,我们随便猜测一个运动轨迹:
轨迹求出来之后,那么我们要求求x=3时,y=?就好办了:
同时穿过这4个点的曲线有无数多条,所以我们也有很多的插值方法。
2 线性插值
这是最简单的插值:
这种近似太粗糙,我压根不需要x=1,x=5的数据,我只需要x=2,x=4的数据,两点决定一根直线嘛。
何况老司机开普勒也知道,火星不可能像撞球一样折线运动,所以这种插值方法pass。
3 多项式插值
很早数学家就知道多项式可以形成各种曲线了,所以用多项式来插值也是很自然的想法。
3.1 线性方程
我们现在有4个已知数x=1,y=3x=2,y=6x=4,y=5x=5,y=7,可以联立方程组求出f(x)=a+bx+cx^2+dx^3这个三次多项式的参数a,b,c,d
\begin{cases}    3=a+b+c+d\\    6=a+2b+4c+8d\\    5=a+4b+16c+64d\\    7=a+5b+25c+125d\end{cases}
这样求出的三次多项式(如果有唯一解的话)一定同时经过已知的四个点。
不过线性方程组在实际应用中,直接进行求解有两个重大的问题:
  • 计算量大,对于行星观测而言,几万、几十万观测数据轻轻松松,就算有计算机帮忙,也会面临效率问题
  • 新增加一个点的观测数据,整个计算就要重新来过,想想就很悲伤
为了解决这两个问题、尤其是后一个问题,我们有了牛顿插值法。
3.2 牛顿插值法
牛顿插值法全名是格雷戈里-牛顿公式,格雷戈里和牛顿分别给出了这个插值公式,主要牛顿太耀眼了,所以格雷戈里都被大家忘了。
有关牛顿插值法的内容发表在大名鼎鼎的《自然哲学的数学原理》的第三卷的引理五:
马同学高等数学
3.3 几何意义
这里叫做牛顿插值法的几何意义不太贴切,因为若干点决定的多项式往往是唯一的(这个就是在线性代数里面的问题了),所以从几何上你看不出背后是用的牛顿插值法还是直接解线性方程组。
下面我是画的图像背后的算法是牛顿插值法,仅供大家直观感受下插值法的效果:
随着已知的点越多,可能我们拟合出来的曲线越精确,可以自己动手试试:
Created with GeoGebra
3.4 推导
牛顿插值法的特点在于:每增加一个点,不会导致之前的重新计算,只需要算和新增点有关的就可以了。
为了表示这是一个数学问题,下面是牛顿插值法的精华:推导过程,前方高能,非战斗人员请退避!
假设已知n+1个点相对多项式函数f的值为:(x_0,f(x_0)),(x_1,f(x_1)),(x_2,f(x_2)), \cdots ,(x_n,f(x_n)),求此多项式函数f
为了避免大家在后面的阅读中迷失,我先把思路列出来一下(其实不复杂,主要是符号看着眼晕):
观察b_1,b_2的特点,不断重复上述过程,就可以得到牛顿插值法。
先从求满足两个点(x_0,f(x_0)),(x_1,f(x_1))的函数f_1(x)说起:
假设f_1(x)=f(x_0)+b_1(x-x_0)
f_1(x_1)=f(x_1):

\begin{align}    &\implies b_1=\frac{f(x_1)-f(x_0)}{x_1-x_0} \\	&\implies f_1(x)=f(x_0)+\frac{f(x_1)-f(x_0)}{x_1-x_0}(x-x_0)\end{align}

现在我们增加一个点,(x_0,f(x_0)),(x_1,f(x_1)),(x_2,f(x_2)),求满足这三个点的函数f_2(x)
假设f_2(x)=f_1(x)+b_2(x-x_0)(x-x_1)
f_2(x_2)=f(x_2)

\begin{align}    &\implies b_2=&&\frac{[\frac{f(x_2) - f(x_1)}{x_2 - x_1}] - [\frac{f(x_1) - f(x_0)}{x_1 - x_0}]}{x_2 - x_0} \\	&\implies f_2(x) = &&f(x_0)+\frac{f(x_1)-f(x_0)}{x_1-x_0}(x-x_0) \\	& &&+\frac{[\frac{f(x_2) - f(x_1)}{x_2 - x_1}] - [\frac{f(x_1) - f(x_0)}{x_1 - x_0}]}{x_2 - x_0}(x-x_0)(x-x_1)\end{align}

b_1,b_2看起来蛮有特点的,我们把特点提炼一下。
一阶均差:
f[x_i,x_j]=\frac{f(x_i)-f(x_j)}{x_i-x_j},i\ne j
二阶均差是一阶均差的均差:
f[x_i,x_j,x_k]=\frac{f[i,j]-f[j,k]}{x_i-x_k},i\ne j\ne k
三阶均差就是二阶均差的均差,以此类推,我们得到牛顿插值法为:

\begin{align}    f(x) =& f({x_0}) + f[{x_0},{x_1}](x - {x_0}) \\    & + f[{x_0},{x_1},{x_2}](x - {x_0})(x - {x_1}) +\cdots \\    & + f[{x_0},{x_1}, \cdots ,{x_{n - 2}},{x_{n - 1}}](x - {x_0})(x - {x_1}) \cdots (x - {x_{n - 2}})(x - {x_{n - 1}}) \\    & + f[{x_0},{x_1}, \cdots ,{x_{n - 1}},{x_n}](x - {x_0})(x - {x_1}) \cdots (x - {x_{n - 1}})(x - {x_n})\end{align}

计算通过下面这个示意图进行,就会很简单:
新增一个点,只需要计算相关的差分就可以了:
4 泰勒公式
泰勒把牛顿插值法做了一些改造。
首先,设f(x)是一个函数,它在x_0,x_0+\Delta x,x_0+2\Delta x,x_0+3\Delta x,\cdots,x_0+n\Delta x的值已知(和之前的相比,相当于每个点都是等距离间隔的,间隔\Delta x),令:
\Delta f(x_0)=f(x_0+\Delta x)-f(x_0),也称为一阶差分,
\Delta f(x_0+\Delta x)=f(x_0+2\Delta x)-f(x_0+\Delta x)
\Delta f(x_0+2\Delta x)=f(x_0+3\Delta x)-f(x_0+2\Delta x)
进一步令:
\Delta^2 f(x_0)=\Delta f(x_0+\Delta x)-\Delta f(x_0),也称为二阶差分(为一阶差分的差分)
\Delta^3 f(x_0)=\Delta^2 f(x_0+\Delta x)-\Delta^2 f(x_0),也称为三阶差分。
做了这些假设之后我们来看看之前提到的b_1会变成什么样子:
b_1=\frac{f(x_1)-f(x_0)}{x_1-x_0}\implies b1=\frac{\Delta f(x_0)}{\Delta x}
f_1(x)会变成:
f_1(x)=f(x_0)+\frac{f(x_1)-f(x_0)}{x_1-x_0}(x-x_0)\implies f_1(x)=f(x_0)+\frac{\Delta f(x_0)}{\Delta x}(x-x_0)
同样的f_2(x)就变成了:
f_2(x)=f(x_0)+\frac{\Delta f(x_0)}{\Delta x}(x-x_0)+\frac{\Delta^2 f(x_0)}{2\Delta x}(x-x_0)(x-x_1)
泰勒断言,当\Delta x=0时:
f_1(x)=f(x_0)+f
f_1(x)=f(x_0)+f\Delta x=0时有x-x_1=x-x_0
以此类推泰勒就得到了大名鼎鼎的泰勒公式:
f(x)=f(x_0)+f
关于泰勒公式可以看看我的这个回答,如何通俗的解释泰勒公式?,大家可以发现牛顿插值公式的动画和泰勒公式的动画确实有相似之处。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多