牛顿插值法

-- TOC --

牛顿插值法的作用,是用多项式拟合曲线。所谓多项式拟合,就是只知道曲线上的一些点,不知道函数表达式,用多项式函数来拟合这条曲线。这种拟合计算,与现代部分人工智能算法联系紧密。

假设一直4个点的位置,我们可以通过列出线性方程组的方式,来求出一条经过这4个点的曲线。

设 \(y=ax^3+bx^2+cx+d\)

分别将4个点的值带入,得到4个只含abcd的方程,可解出abcd。

此时如果在增加1个点,重新做拟合,就要重新使用一个更高次的4次多项式方程,解出abcde这5个系数。

这个方法的计算量太大,对于当时的行星观察而言,动辄几万个点;而且,每新增一个点,可能就需要重新拟合计算。

格雷戈里和牛顿不约而同地、独立地给出了可以解决上述两个问题的、求解多项式曲线的方法。由于牛顿太有名,因此这个方法被称为牛顿插值法。

假设有4个已知的点:\((x_0,y_0),(x_1,y_1),(x_2,y_2),(x_3,y_3)\)

从第1个点\((x_0,y_0)\)开始计算,此时只有1个点,经过这一个点的,就是一个常数函数:

\(f(x) = f_0(x) = f_0(x_0) = y_0\)

增加1个点,现在有2个点\((x_0,y_0),(x_1,y_1)\),构造函数如下:

\(f(x) = f_1(x) = f_0(x) + b_1(x-x_0)\)

这样构造函数,保证了此函数经过前面已经计算过的第1个点,带入\(x=x_0\)后,\(f_1(x_0) = f_0(x_0)\),第二个函数与第一个就成了一样的。这个构造函数经过前面的点的技巧是牛顿插值法的关键。

可解出 \(b_1 = \cfrac{f(x_1)-f(x_0)}{x_1-x_0} = \cfrac{y_1-y_0}{x_1-x_0}\)

再增加1个点,现在有3个点\((x_0,y_0),(x_1,y_1),(x_2,y_2)\),构造函数如下:

\(f(x) = f_2(x) = f_1(x) + b_2(x-x_1)(x-x_0)\)

这样构造函数,保证了新函数一定经过前面已经计算过的两个点。

可解出 \(b_2 = \cfrac{\frac{y_2-y_1}{x_2-x_1}-\frac{y_1-y_0}{x_1-x_0}}{x_2-x_0}\)

看到点规律了嘛...

再增加1个点,现在有4个点\((x_0,y_0),(x_1,y_1),(x_2,y_2),(x_3,y_3)\),构造函数:

\(f(x) = f_3(x) = f_2(x) + b_3(x-x_2)(x-x_1)(x-x_0)\)

肯定可以解出\(b_3\),由于\(b_3\)的表达式有点复杂,这里引入一种新的标记方法差商

\(f(x_0) = f[x_0]\)

\(b_1 = \cfrac{y_1-y_0}{x_1-x_0} = f[x_0,x_1]\)

\(b_2 = \cfrac{f[x_1,x_2]-f[x_0-x_1]}{x_2-x_0} = f[x_0,x_1,x_2]\)

\(b_3 = \cfrac{f[x_1,x_2,x_3]-f[x_0,x_1,x_2]}{x_3-x_0} = f[x_0,x_1,x_2,x_3]\)

这里就是降低计算量的关键:

chashang.png

差商的这种层层递进的数值关系,使得每增加一个新的点,只需要计算与新增的这个点的相关的差商,其它已经计算出来的差商保持不变。

最后,牛顿插值法的计算公式:

$$f(x)=f[x_0] + f[x_0,x_1](x-x_0) + \cdots + f[x_0,x_1,...,x_n]\Pi_{k=0}^{n-1}(x-x_k)$$

笔记做到这里,由于有一点人工智能神经网络算法的背景,我感觉牛顿插值法是否存在过拟合的问题。因为,计算出来的曲线,必然会严格经过所有的已知的点。

本文链接:https://cs.pynote.net/math/202208292/

-- EOF --

-- MORE --