多项式插值
先有一个函数 f ( x ) f(x) f(x),如果给定在区间 [ a , b ] [a,b] [a,b]上的 n + 1 n+1 n+1个点 a < = x 0 < x 1 < ⋅ ⋅ ⋅ < x n < = b a<=x_0<x_1<···<x_n<=b a<=x0<x1<⋅⋅⋅<xn<=b,已知 f ( x ) f(x) f(x)在这些点的函数值 y 0 , y 1 , ⋅ ⋅ ⋅ , y n y_0,y_1,···,y_n y0,y1,⋅⋅⋅,yn,现在要求一个次数不超过n次的多项式函数P(x),使得 P ( x i ) = y i P(x_i)=y_i P(xi)=yi,这样的一个过程叫做多项式插值。现在问题是,是否一定存在这样的多项式,如果存在,这样的多项式是否唯一?
求解这个问题就等价于求解线性方程组: { a 0 + a 1 x 0 + a 2 x 0 2 + ⋅ ⋅ ⋅ + a n x 0 n = y 0 a 0 + a 1 x 1 + a 2 x 1 2 + ⋅ ⋅ ⋅ + a n x 1 n = y 1 ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ a 0 + a 1 x n + a 2 x n 2 + ⋅ ⋅ ⋅ + a n x n n = y n \begin{cases} a_0+a_1x_0+a_2x_0^2+···+a_nx_0^n=y_0\\ a_0+a_1x_1+a_2x_1^2+···+a_nx_1^n=y_1\\·····················\\ a_0+a_1x_n+a_2x_n^2+···+a_nx_n^n=y_n \end{cases} ⎩⎪⎪⎪⎨⎪⎪⎪⎧a0+a1x0+a2x02+⋅⋅⋅+anx0n=y0a0+a1x1+a2x12+⋅⋅⋅+anx1n=y1⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅a0+a1xn+a2xn2+⋅⋅⋅+anxnn=yn
这是一个关于系数 ( a 0 , a 1 , ⋅ ⋅ ⋅ , a n ) (a_0,a_1,···,a_n) (a0,a1,⋅⋅⋅,an)的线性方程组,考虑它的系数矩阵行列式: ∣ 1 x 0 x 0 2 x 0 3 ⋅ ⋅ ⋅ x 0 n 1 x 1 x 1 2 x 1 3 ⋅ ⋅ ⋅ x 1 n 1 x 2 x 2 2 x 2 3 ⋅ ⋅ ⋅ x 2 n ⋅ ⋅ ⋅ ⋅ ⋅ 1 x n x n 2 x n 3 ⋅ ⋅ ⋅ x n n ∣ \begin{vmatrix} 1 & x_0 &x_0^2 & x_0^3 ··· &x_0^n \\ 1 & x_1 &x_1^2 & x_1^3 ··· &x_1^n \\ 1 & x_2 &x_2^2 & x_2^3 ··· &x_2^n\\ ·&·&·&·&·\\ 1 & x_n &x_n^2 & x_n^3 ··· &x_n^n\\ \end{vmatrix} ∣∣∣∣∣∣∣∣∣∣111⋅1x0x1x2⋅xnx02x12x22⋅xn2x03⋅⋅⋅x13⋅⋅⋅x23⋅⋅⋅⋅xn3⋅⋅⋅x0nx1nx2n⋅xnn∣∣∣∣∣∣∣∣∣∣
这是一个范德蒙行列式,它的值为: ∏ 0 < = i < j < = n ( x j − x i ) \prod_{0<=i<j<=n}(x_j-x_i) ∏0<=i<j<=n(xj−xi),由于 x j ≠ x i x_j ≠ x_i xj̸=xi,这个行列式的值不等于零,因此系数矩阵满秩,该线性方程组有且只有一个解。
因此,给定一个点值序列 ( x 0 , y 0 ) , ( x 1 , y 1 ) , ⋅ ⋅ ⋅ , ( x n , y n ) (x_0,y_0),(x_1,y_1),···,(x_n,y_n) (x0,y0),(x1,y1),⋅⋅⋅,(xn,yn),如果这些点的横坐标互不相同,那么这个序列就可以被映射到一个唯一的多项式,反过来,如果给定互不相同的n+1个x,对于任意的两个不同的n次多项式,它们在这些x下的取值一定不完全相同,否则上述方程组就不应该只有一个解。因此点值序列与多项式之间存在一个一一对应的关系。
直接求解上述方程组可以得到结果,但是这个方法效率太低。
拉格朗日插值法
先从最简单的情况出发,即n=1时,这个时候对应的多项式应该是一条直线,由直线的两点式表示法有: L ( x ) = y k x k + 1 − x x k + 1 − x k + y k + 1 x − x k x k + 1 − x k L(x) = y_k\frac{x_{k+1}-x}{x_{k+1}-x_{k}} + y_{k+1}\frac{x-x_k}{x_{k+1}-x_k} L(x)=ykxk+1−xkxk+1−x+yk+1xk+1−xkx−xk
观察这个式子,可以看到 L ( x ) L(x) L(x)实际上是两个线性函数 l k ( x ) = x k + 1 − x x k + 1 − x k , l k + 1 ( x ) = x − x k x k + 1 − x k l_k(x)=\frac{x_{k+1}-x}{x_{k+1}-x_k},l_{k+1}(x)=\frac{x-x_k}{x_{k+1}-x_k} l