一、数学基础
理解拉格朗日插值,首先需要明确多项式函数的基本性质。对于一个 mmm 次多项式 f(x)f(x)f(x),其一般形式可表示为:
f(x)=a0+a1x+a2x2+⋯+amxmf(x)=a_0+a_1x+a_2x^2+\cdots+a_mx^m f(x)=a0 +a1 x+a2 x2+⋯+am xm
其中 aia_iai 为多项式的系数,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,而在其余所有已知点 xj (j≠i)x_j\ (j\neq i)xj (j=i) 处取值为 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)=∏0≤j≤mj≠ix−xjxi−xjl_i(x) = \frac{l_i'(x)}{l_i'(x_i)} = \prod_{\substack{0 \leq j \leq m \\ j \neq i}} \frac{x - x_j}{x_i - x_j} li (x)=li′ (xi )li′ (x) =0≤j≤mj=i ∏ xi −xj x−xj
得到基函数后,我们将其代入插值函数的表达式,就可以得到完整的拉格朗日插值公式:
P(x)=∑i=0myi⋅li(x)=∑i=0myi∏0≤j≤mj≠ix−xjxi−***(x)=\sum_{i=0}^m y_i \cdot l_i(x) = \sum_{i=0}^m y_i \prod_{\substack{0 \leq j \leq m \\ j \neq i}} \frac{x - x_j}{x_i - x_j} P(x)=i=0∑m yi ⋅li (x)=i=0∑m yi 0≤j≤mj=i ∏ xi −xj x−xj
四、示例验证
我们可以通过一个具体示例来验证上述公式的正确性:假设我们需要构造一个多项式,使其穿过点 (0,1),(1,2),(2,1)(0,1),(1,2),(2,1)(0,1),(1,2),(2,1)。根据插值的基本理论,3个横坐标互不相同的点可以唯一确定一个次数不超过2的多项式,也就是二次函数。
我们首先分别计算每个点对应的基函数:
* 对于点 (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+1 l0 (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+2x l1 (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}x l2 (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+1\begin{align*} P(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+1 \end{align*} P(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) 吻合。
这说明我们推导的拉格朗日插值公式是完全正确的。
> 注:本文在撰写完毕后由 豆包 进行了润色