一、数学基础
理解拉格朗日插值,首先需要明确多项式函数的基本性质。在小学二年级我们学过,对于一个 mmm 次多项式 f(x)f(x)f(x),其一般形式一定可以表示为 f(x)=a0+a1x+a2x2+⋯+amxmf(x)=a_0+a_1x+a_2x^2+\cdots+a_mx^mf(x)=a0 +a1 x+a2 x2+⋯+am xm。其中 aia_iai 称作多项式的 iii 次项系数,xxx 称作自变量。该函数共有 m+1m+1m+1 个未知的系数,进行因式分解后,不难得出:给定平面上 m+1m+1m+1 个横坐标互不相同的点 (x0,y0),(x1,y1),⋯ ,(xm,ym)(x_0,
y_0),(x_1, y_1),\cdots,(x_m, y_m)(x0 ,y0 ),(x1 ,y1 ),⋯,(xm ,ym ),我们可以唯一确定一个次数不超过 mmm 的多项式函数 f(x)f(x)f(x),使其图像恰好经过这 m+1m+1m+1 个点。这正是拉格朗日插值法的核心理论基础。
二、基本原理
拉格朗日插值的核心思想是构造基函数并组合,类似于分治算法:我们可以将待求的插值函数 P(x)P(x)P(x) 拆解为多个简单的基函数的加权和。我们为每个已知点 (xi,yi)(x_i, y_i)(xi ,yi ) 构造一个对应的基函数 li(x)l_i(x)li (x),要求这个基函数满足:在 x=xix=x_ix=xi 处取值为 111,而在其余所有已知点 xjx_jxj 处取值为 000。
这样一来,我们就可以把插值函数 P(x)P(x)P(x) 表示为这些基函数的和:P(x)=y0l0(x)+y1l1(x)+y2l2(x)+⋯+ymlm(x)P(x)=y_0l_0(x)+y_1l_1(x)+y_2l_2(x)+\cdots+y_ml_m(x)P(x)=y0 l0 (x)+y1 l1 (x)+y2 l2 (x)+⋯+ym lm (x),此时,求插值函数的问题就转化为了求解这一系列拉格朗日基函数的问题。
三、拉格朗日基函数
接下来我们来具体构造满足要求的基函数 li(x)l_i(x)li (x)。根据多项式因式分解的性质:若一个 mmm 次多项式在 mmm 个互不相同的点处取值为0,那么它一定可以写成 f(x)=a∏j=0m(x−bj)f(x)=a\prod_{j=0}^m (x-b_j)f(x)=a∏j=0m (x−bj ) 的形式,其中 aaa 为非零常数,b0,b1,...,bmb_0,b_1,...,b_mb0 ,b1 ,...,bm 就是该多项式的根。
基于这个性质,我们可以先构造一个初步的多项式:li′(x)=(x−x0)(x−x1)⋯(x−xi−1)(x−xi+1)⋯(x−xm)l_i'(x)=(x-x_0)(x-x_1)\cdots(x-x_{i-1})(x-x_{i+1})\cdots(x-x_m)li′ (x)=(x−x0 )(x−x1 )⋯(x−xi−1 )(x−xi+1 )⋯(x−xm )。这个多项式的特点是:对于所有 j≠ij\neq ij=i,都有 li′(xj)=0l_i'(x_j)=0li′ (xj )=0,正好满足基函数在其余点处取0的要求。但我们很快会发现,这个多项式在 xix_ixi
处的取值并不一定是1,因此,我们需要对它进行归一化处理。
我们可以通过代入计算确定这个归一化常数:将 x=xix=x_ix=xi 代入上述初步多项式,可得 li′(xi)=(xi−x0)(xi−x1)⋯(xi−xi−1)(xi−xi+1)⋯(xi−xm)l_i'(x_i)=(x_i-x_0)(x_i-x_1)\cdots(x_i-x_{i-1})(x_i-x_{i+1})\cdots(x_i-x_m)li′ (xi )=(xi −x0 )(xi −x1 )⋯(xi −xi−1 )(xi −xi+1 )⋯(xi −xm )。为了让基函数在 xix_ixi
处的取值为1,我们只需要将初步多项式除以这个值即可。因此,最终的拉格朗日基函数可以表示为:li(x)=li′(x)li′(xi)=∏j=0,j≠imx−xjxi−xjl_i(x) = \frac{l_i'(x)}{l_i'(x_i)} = \prod_{j = 0 , j \neq i} ^m \frac{x - x_j}{x_i - x_j}li (x)=li′ (xi )li′ (x) =∏j=0,j=im xi −xj x−xj
得到基函数后,我们将其代入插值函数的表达式,就可以得到完整的拉格朗日插值公式了:P(x)=∑i=0myi⋅li(x)=∑i=0m(yi∏j=0,j≠imx−xjxi−****(x)=\sum_{i=0}^m y_i \cdot l_i(x) = \sum_{i=0}^m (y_i \prod_{j = 0 , j \neq i} ^m \frac{x - x_j}{x_i - x_j})P(x)=∑i=0m yi ⋅li (x)=∑i=0m (yi ∏j=0,j=im xi −xj x−xj )。
四、示例验证
那这个公式对不对呢?我们可以通过一个具体示例来验证它的正确性:假设我们需要构造一个多项式,使其穿过点 (0,1),(1,2),(2,1)(0,1),(1,2),(2,1)(0,1),(1,2),(2,1)。根据基本理论,333 个横坐标互不相同的点可以唯一确定一个次数不超过 222 的多项式,也就是说,可以用一个二次函数解决这个问题。
首先,我们分别计算每个点对应的基函数:
* 对于点 (0,1)(0,1)(0,1),基函数为 l0(x)=(x−1)(x−2)(0−1)(0−2)=12x2−32x+1l_0(x)=\frac{(x-1)(x-2)}{(0-1)(0-2)}=\frac{1}{2}x^2-\frac{3}{2}x+1l0 (x)=(0−1)(0−2)(x−1)(x−2) =21 x2−23 x+1;
* 对于点 (1,2)(1,2)(1,2),基函数为 l1(x)=(x−0)(x−2)(1−0)(1−2)=−x2+2xl_1(x)=\frac{(x-0)(x-2)}{(1-0)(1-2)}=-x^2+2xl1 (x)=(1−0)(1−2)(x−0)(x−2) =−x2+2x;
* 对于点 (2,1)(2,1)(2,1),基函数为 l2(x)=(x−0)(x−1)(2−0)(2−1)=12x2−12xl_2(x)=\frac{(x-0)(x-1)}{(2-0)(2-1)}=\frac{1}{2}x^2-\frac{1}{2}xl2 (x)=(2−0)(2−1)(x−0)(x−1) =21 x2−21 x。
接下来我们将基函数与对应的函数值加权求和,得到多项式 P(x)=1⋅l0(x)+2⋅l1(x)+1⋅l2(x)=(12x2−32x+1)+2(−x2+2x)+(12x2−12x)=−x2+2x+1P(x) = 1\cdot l_0(x) + 2\cdot l_1(x) + 1\cdot l_2(x) = \left(\frac{1}{2}x^2-\frac{3}{2}x+1\right) + 2\left(-x^2+2x\right) + \left(\frac{1}{2}x^2-\frac{1}{2}x\right) = -x^2+2x+1P(x)=1⋅l0 (x)+2⋅l1
(x)+1⋅l2 (x)=(21 x2−23 x+1)+2(−x2+2x)+(21 x2−21 x)=−x2+2x+1。
最后,我们代入原有点进行验证:
* P(0)=−02+2×0+1=1P(0) = -0^2 + 2\times0 +1 = 1P(0)=−02+2×0+1=1,与点 (0,1)(0,1)(0,1) 吻合;
* P(1)=−12+2×1+1=2P(1) = -1^2 + 2\times1 +1 = 2P(1)=−12+2×1+1=2,与点 (1,2)(1,2)(1,2) 吻合;
* P(2)=−22+2×2+1=1P(2) = -2^2 + 2\times2 +1 = 1P(2)=−22+2×2+1=1,与点 (2,1)(2,1)(2,1) 吻合。
这说明我们构造出的插值函数 P(x)P(x)P(x) 是正确的。
五、实战演练
最后,我来给大家布置一个小作业,可以在评论区留言解答:请利用上述公式构造一个 nnn 次函数,使其函数图像穿过点 (0,1),(1,0),(2,−1),(3,0)(0,1),(1,0),(2,-1),(3,0)(0,1),(1,0),(2,−1),(3,0),要求写出 nnn 的最小值和构造出的函数。
> 截至 2026/7/29,无人做出。提示:第一个基函数 l0=(x−1)(x−2)(x−3)(0−1)(0−2)(0−3)=−x3+3x2+2x2−6x+x2−3x−2x+66=−x3+6x2−11x+66=−16x3+x2−116x+1l_0 = \frac{(x-1)(x-2)(x-3)}{(0-1)(0-2)(0-3)} = \frac{-x^3+3x^2+2x^2-6x+x^2-3x-2x+6}{6}=\frac{-x^3+6x^2-11x+6}{6}=-\frac{1}{6}x^3+x^2-\frac{11}{6}x+1l0
> =(0−1)(0−2)(0−3)(x−1)(x−2)(x−3) =6−x3+3x2+2x2−6x+x2−3x−2x+6 =6−x3+6x2−11x+6 =−61 x3+x2−611 x+1。
> 2026/8/3,大佬 Lin.Zikang 利用程序成功做出。