多项式插值
先有一个函数f(x)f(x)f(x),如果给定在区间[a,b][a,b][a,b]上的n+1n+1n+1个点a<=x0<x1<⋅⋅⋅<xn<=ba<=x_0<x_1<···<x_n<=ba<=x0<x1<⋅⋅⋅<xn<=b,已知f(x)f(x)f(x)在这些点的函数值y0,y1,⋅⋅⋅,yny_0,y_1,···,y_ny0,y1,⋅⋅⋅,yn,现在要求一个次数不超过n次的多项式函数P(x),使得P(xi)=yiP(x_i)=y_iP(xi)=yi,这样的一个过程叫做多项式插值。现在问题是,是否一定存在这样的多项式,如果存在,这样的多项式是否唯一?
求解这个问题就等价于求解线性方程组:{
a0+a1x0+a2x02+⋅⋅⋅+anx0n=y0a0+a1x1+a2x12+⋅⋅⋅+anx1n=y1⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅a0+a1xn+a2xn2+⋅⋅⋅+anxnn=yn \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
这是一个关于系数(a0,a1,⋅⋅⋅,an)(a_0,a_1,···,a_n)(a0,a1,⋅⋅⋅,an)的线性方程组,考虑它的系数矩阵行列式:∣1x0x02x03⋅⋅⋅x0n1x1x12x13⋅⋅⋅x1n1x2x22x23⋅⋅⋅x2n⋅⋅⋅⋅⋅1xnxn2xn3⋅⋅⋅xnn∣ \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(xj−xi)\prod_{0<=i<j<=n}(x_j-x_i)∏0<=i<j<=n(xj−xi),由于xj≠xix_j ≠ x_ixj̸=xi,这个行列式的值不等于零,因此系数矩阵满秩,该线性方程组有且只有一个解。
因此,给定一个点值序列(x0,y0),(x1,y1),⋅⋅⋅,(xn,yn)(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)=ykxk+1−xxk+1−xk+yk+1x−xkxk+1−xkL(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)实际上是两个线性函数lk(x)=xk+1−xxk+1−xk,lk+1(x)=x−xkxk+1−xkl_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}lk(x)=