已知平面上4个点:(−9, 5) , (−4, 2) , (−1, −2) , (7, 9) ,拉格朗日多项式:L (x ) (黑色)穿过所有点。而每个基本多项式:y0 ℓ 0 (x ) , y1 ℓ 1 (x ) , y2 ℓ 2 (x ) 以及y3 ℓ 3 (x ) 各穿过对应的一点,并在其它的三个点的x 值上取零。 在数值分析 中,拉格朗日插值法 是以法国 18世纪数学家 约瑟夫·拉格朗日 命名的一种多项式插值 方法。许多实际问题中都用函数 来表示各結果之間某种内在联系或规律,而不少函数都只能通过繁複实验和多次观测来了解。而,如果对实践中的某个物理 量进行观测,在若干个不同的地方得到相应的观测值,拉格朗日插值法可以找到一个多项式 ,其恰好在各个观测的点取到观测到的值。上面这样的多项式就称为拉格朗日(插值)多项式 (Lagrange polynomial)。数学 上来说,拉格朗日插值法可以给出一个恰好穿过二维平面 上若干个已知点的多项式函数。拉格朗日插值法最早被英国 数学家爱德华·华林 于1779年发现[ 1] ,不久后(1783年)由莱昂哈德·欧拉 再次发现。1795年,拉格朗日在其著作《师范学校数学基础教程》中发表这个插值方法,从此他的名字就和这个方法联系在一起[ 2] 。
对于给定的若n+1 个点 ( x 0 , y 0 ) , ( x 1 , y 1 ) , … , ( x n , y n ) {\displaystyle (x_{0},y_{0}),(x_{1},y_{1}),\ldots ,(x_{n},y_{n})} ,对应于它们的次数不超过n 的拉格朗日多项式 L {\displaystyle \scriptstyle L} 只有一个。如果计入次数更高的多项式,则有无穷个,因为所有与 L {\displaystyle \scriptstyle L} 相差 λ ( x − x 0 ) ( x − x 1 ) … ( x − x n ) {\displaystyle \lambda (x-x_{0})(x-x_{1})\ldots (x-x_{n})} 的多项式都满足条件。
对某个多项式函数 ,已知有给定的k + 1个取值点:
( x 0 , y 0 ) , … , ( x k , y k ) {\displaystyle (x_{0},y_{0}),\ldots ,(x_{k},y_{k})} 其中 x j {\displaystyle x_{j}} 对应着自变量 的位置,而 y j {\displaystyle y_{j}} 对应着函数在这个位置的取值。
假设任意两个不同的x j 都互不相同,那么应用拉格朗日插值公式所得到的拉格朗日插值多项式 为:
L ( x ) := ∑ j = 0 k y j ℓ j ( x ) {\displaystyle L(x):=\sum _{j=0}^{k}y_{j}\ell _{j}(x)} 其中每个 ℓ j ( x ) {\displaystyle \ell _{j}(x)} 为拉格朗日基本多项式 (或称插值基函数 ),其表达式为:
ℓ j ( x ) := ∏ i = 0 , i ≠ j k x − x i x j − x i = ( x − x 0 ) ( x j − x 0 ) ⋯ ( x − x j − 1 ) ( x j − x j − 1 ) ( x − x j + 1 ) ( x j − x j + 1 ) ⋯ ( x − x k ) ( x j − x k ) . {\displaystyle \ell _{j}(x):=\prod _{i=0,\,i\neq j}^{k}{\frac {x-x_{i}}{x_{j}-x_{i}}}={\frac {(x-x_{0})}{(x_{j}-x_{0})}}\cdots {\frac {(x-x_{j-1})}{(x_{j}-x_{j-1})}}{\frac {(x-x_{j+1})}{(x_{j}-x_{j+1})}}\cdots {\frac {(x-x_{k})}{(x_{j}-x_{k})}}.} [ 3] 拉格朗日基本多项式 ℓ j ( x ) {\displaystyle \ell _{j}(x)} 的特点是在 x j {\displaystyle x_{j}} 上取值为1 ,在其它的点 x i , i ≠ j {\displaystyle x_{i},\,i\neq j} 上取值为0 。
假设有某个二次多项式函数 f {\displaystyle f} ,已知它在三个点上的取值为:
f ( 4 ) = 10 {\displaystyle f(4)=10} f ( 5 ) = 5.25 {\displaystyle f(5)=5.25} f ( 6 ) = 1 {\displaystyle f(6)=1} 要求 f ( 18 ) {\displaystyle f(18)} 的值。
首先写出每个拉格朗日基本多项式:
ℓ 0 ( x ) = ( x − 5 ) ( 4 − 5 ) ⋅ ( x − 6 ) ( 4 − 6 ) {\displaystyle \ell _{0}(x)={\frac {(x-5)}{(4-5)}}\cdot {\frac {(x-6)}{(4-6)}}} ℓ 1 ( x ) = ( x − 4 ) ( 5 − 4 ) ⋅ ( x − 6 ) ( 5 − 6 ) {\displaystyle \ell _{1}(x)={\frac {(x-4)}{(5-4)}}\cdot {\frac {(x-6)}{(5-6)}}} ℓ 2 ( x ) = ( x − 4 ) ( 6 − 4 ) ⋅ ( x − 5 ) ( 6 − 5 ) {\displaystyle \ell _{2}(x)={\frac {(x-4)}{(6-4)}}\cdot {\frac {(x-5)}{(6-5)}}} 然后应用拉格朗日插值法,就可以得到 p {\displaystyle p} 的表达式( p {\displaystyle p} 为函数 f {\displaystyle f} 的插值函数):
p ( x ) = f ( 4 ) ℓ 0 ( x ) + f ( 5 ) ℓ 1 ( x ) + f ( 6 ) ℓ 2 ( x ) {\displaystyle p(x)=f(4)\ell _{0}(x)+f(5)\ell _{1}(x)+f(6)\ell _{2}(x)} . = 10 ⋅ ( x − 5 ) ( x − 6 ) ( 4 − 5 ) ( 4 − 6 ) + 5.25 ⋅ ( x − 4 ) ( x − 6 ) ( 5 − 4 ) ( 5 − 6 ) + 1 ⋅ ( x − 4 ) ( x − 5 ) ( 6 − 4 ) ( 6 − 5 ) {\displaystyle .\,\,\,\,\,\,\,\,\,\,=10\cdot {\frac {(x-5)(x-6)}{(4-5)(4-6)}}+5.25\cdot {\frac {(x-4)(x-6)}{(5-4)(5-6)}}+1\cdot {\frac {(x-4)(x-5)}{(6-4)(6-5)}}} . = 1 4 ( x 2 − 28 x + 136 ) {\displaystyle .\,\,\,\,\,\,\,\,\,\,={\frac {1}{4}}(x^{2}-28x+136)} 此時代入数值 18 {\displaystyle \ 18} 就可以求出所需之值: f ( 18 ) = p ( 18 ) = − 11 {\displaystyle \ f(18)=p(18)=-11} 。
对于给定的k +1个点: ( x 0 , y 0 ) , … , ( x k , y k ) {\displaystyle (x_{0},y_{0}),\ldots ,(x_{k},y_{k})} ,拉格朗日插值法的思路是找到一个在一点 x j {\displaystyle x_{j}} 取值为1 ,而在其他点取值都是0 的多项式 ℓ j ( x ) {\displaystyle \ell _{j}(x)} 。这样,多项式 y j ℓ j ( x ) {\displaystyle y_{j}\ell _{j}(x)} 在点 x j {\displaystyle x_{j}} 取值为 y j {\displaystyle y_{j}} ,而在其他点取值都是0 。而多项式 L ( x ) := ∑ j = 0 k y j ℓ j ( x ) {\displaystyle L(x):=\sum _{j=0}^{k}y_{j}\ell _{j}(x)} 就可以满足
L ( x j ) = ∑ i = 0 k y i ℓ i ( x j ) = 0 + 0 + ⋯ + y j + ⋯ + 0 = y j {\displaystyle L(x_{j})=\sum _{i=0}^{k}y_{i}\ell _{i}(x_{j})=0+0+\cdots +y_{j}+\cdots +0=y_{j}} 在其它点取值为0 的多项式容易找到,例如:
( x − x 0 ) ⋯ ( x − x j − 1 ) ( x − x j + 1 ) ⋯ ( x − x k ) {\displaystyle (x-x_{0})\cdots (x-x_{j-1})(x-x_{j+1})\cdots (x-x_{k})} 它在点 x j {\displaystyle x_{j}} 取值为: ( x j − x 0 ) ⋯ ( x j − x j − 1 ) ( x j − x j + 1 ) ⋯ ( x j − x k ) {\displaystyle (x_{j}-x_{0})\cdots (x_{j}-x_{j-1})(x_{j}-x_{j+1})\cdots (x_{j}-x_{k})} 。由于已经假定 x i {\displaystyle x_{i}} 两两互不相同,因此上面的取值不等于0 。于是,将多项式除以这个取值,就得到一个满足“在 x j {\displaystyle x_{j}} 取值为1 ,而在其他点取值都是0 的多项式”:
ℓ j ( x ) := ∏ i = 0 , i ≠ j k x − x i x j − x i = ( x − x 0 ) ( x j − x 0 ) ⋯ ( x − x j − 1 ) ( x j − x j − 1 ) ( x − x j + 1 ) ( x j − x j + 1 ) ⋯ ( x − x k ) ( x j − x k ) {\displaystyle \ell _{j}(x):=\prod _{i=0,\,i\neq j}^{k}{\frac {x-x_{i}}{x_{j}-x_{i}}}={\frac {(x-x_{0})}{(x_{j}-x_{0})}}\cdots {\frac {(x-x_{j-1})}{(x_{j}-x_{j-1})}}{\frac {(x-x_{j+1})}{(x_{j}-x_{j+1})}}\cdots {\frac {(x-x_{k})}{(x_{j}-x_{k})}}} 这就是拉格朗日基本多项式。
次数不超过k 的拉格朗日多项式至多只有一个,因为对任意两个次数不超过k 的拉格朗日多项式: P 1 {\displaystyle P_{1}} 和 P 2 {\displaystyle P_{2}} ,它们的差 P 1 − P 2 {\displaystyle P_{1}-P_{2}} 在所有k +1个点上取值都是0 ,因此必然是多项式 ( x − x 0 ) ( x − x 1 ) ⋯ ( x − x k ) {\displaystyle (x-x_{0})(x-x_{1})\cdots (x-x_{k})} 的倍数。因此,如果这个差 P 1 − P 2 {\displaystyle P_{1}-P_{2}} 不等于0 ,次数就一定不小于k +1。但是 P 1 − P 2 {\displaystyle P_{1}-P_{2}} 是两个次数不超过k 的多项式之差,它的次数也不超过k 。所以 P 1 − P 2 = 0 {\displaystyle P_{1}-P_{2}=0} ,也就是说 P 1 = P 2 {\displaystyle P_{1}=P_{2}} 。这样就证明了唯一性[ 4] 。
拉格朗日插值法中用到的拉格朗日基本多项式 ℓ 0 , ℓ 1 , ⋯ , ℓ n {\displaystyle \ell _{0},\ell _{1},\cdots ,\ell _{n}} (由某一组 x 0 < x 1 < ⋯ < x n {\displaystyle x_{0}<x_{1}<\cdots <x_{n}} 确定)可以看做是由次数不超过n 的多项式所组成的线性空间 : K n [ X ] {\displaystyle \mathbb {K} _{n}[X]} 的一组基底 。首先,如果存在一组系数 : λ 0 , λ 1 , ⋯ , λ n {\displaystyle \lambda _{0},\lambda _{1},\cdots ,\lambda _{n}} 使得,
P = λ 0 ℓ 0 + λ 1 ℓ 1 + ⋯ + λ n ℓ n = 0 {\displaystyle P=\lambda _{0}\ell _{0}+\lambda _{1}\ell _{1}+\cdots +\lambda _{n}\ell _{n}=0} , 那么,一方面多项式P 是满足 P ( x 0 ) = λ 0 , P ( x 1 ) = λ 1 , ⋯ , P ( x n ) = λ n {\displaystyle P(x_{0})=\lambda _{0},P(x_{1})=\lambda _{1},\cdots ,P(x_{n})=\lambda _{n}} 的拉格朗日插值多项式,另一方面P 是零多项式,所以取值永远是0 。所以
λ 0 = λ 1 = ⋯ = λ n = 0 {\displaystyle \lambda _{0}=\lambda _{1}=\cdots =\lambda _{n}=0} 。 这证明了 ℓ 0 , ℓ 1 , ⋯ , ℓ n {\displaystyle \ell _{0},\ell _{1},\cdots ,\ell _{n}} 是线性无关 的。同时它一共包含n+1 个多项式,恰好等于 K n [ X ] {\displaystyle \mathbb {K} _{n}[X]} 的维数。所以 ℓ 0 , ℓ 1 , ⋯ , ℓ n {\displaystyle \ell _{0},\ell _{1},\cdots ,\ell _{n}} 构成了 K n [ X ] {\displaystyle \mathbb {K} _{n}[X]} 的一组基底。
拉格朗日基本多项式作为基底的好处是所有的多项式都是齐次的(都是n 次多项式)。
拉格朗日插值法的公式结构整齐紧凑,在理论分析中十分方便,然而在计算中,当插值点增加或减少一个时,所对应的基本多项式就需要全部重新计算,于是整个公式都会变化,非常繁琐[ 5] 。这时可以用重心拉格朗日插值法或牛顿插值法 来代替。此外,当插值点比较多的时候,拉格朗日插值多项式的次数可能会很高,因此具有数值不稳定 的特点,也就是说尽管在已知的几个点取到给定的数值,但在附近却会和“实际上”的值之间有很大的偏差(如右下图)[ 6] 。这类现象也被称为龙格现象 ,解决的办法是分段用较低次数的插值多项式。
重心拉格朗日插值法是拉格朗日插值法的一种改进。在拉格朗日插值法中,运用多项式
ℓ ( x ) = ( x − x 0 ) ( x − x 1 ) ⋯ ( x − x k ) {\displaystyle \ell (x)=(x-x_{0})(x-x_{1})\cdots (x-x_{k})} 拉格朗日插值法的数值稳定性:如图,用于模拟一个十分平稳的函数时,插值多项式的取值可能会突然出现一个大的偏差(图中的14至15中间) 可以将拉格朗日基本多项式重新写为:
ℓ j ( x ) = ℓ ( x ) x − x j 1 ∏ i = 0 , i ≠ j k ( x j − x i ) {\displaystyle \ell _{j}(x)={\frac {\ell (x)}{x-x_{j}}}{\frac {1}{\prod _{i=0,i\neq j}^{k}(x_{j}-x_{i})}}} 定义重心权 [ 7] [ 8]
w j = 1 ∏ i = 0 , i ≠ j k ( x j − x i ) {\displaystyle w_{j}={\frac {1}{\prod _{i=0,i\neq j}^{k}(x_{j}-x_{i})}}} 上面的表达式可以简化为:
ℓ j ( x ) = ℓ ( x ) w j x − x j {\displaystyle \ell _{j}(x)=\ell (x){\frac {w_{j}}{x-x_{j}}}} 于是拉格朗日插值多项式变为:
L ( x ) = ℓ ( x ) ∑ j = 0 k w j x − x j y j ( 1 ) {\displaystyle L(x)=\ell (x)\sum _{j=0}^{k}{\frac {w_{j}}{x-x_{j}}}y_{j}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (1)} 即所谓的重心拉格朗日插值公式(第一型)或改进拉格朗日插值公式。它的优点是当插值点的个数增加一个时,将每个 w j {\displaystyle w_{j}} 都除以 ( x j − x k + 1 ) {\displaystyle (x_{j}-x_{k+1})} ,就可以得到新的重心权 w k + 1 {\displaystyle w_{k+1}} ,计算复杂度为 O ( n ) {\displaystyle {\mathcal {O}}(n)} ,比重新计算每个基本多项式所需要的复杂度 O ( n 2 ) {\displaystyle {\mathcal {O}}(n^{2})} 降了一个量级。
将以上的拉格朗日插值多项式用来对函数 g ( x ) ≡ 1 {\displaystyle g(x)\equiv 1} 插值,可以得到:
∀ x , g ( x ) = ℓ ( x ) ∑ j = 0 k w j x − x j {\displaystyle \forall x,\,g(x)=\ell (x)\sum _{j=0}^{k}{\frac {w_{j}}{x-x_{j}}}} 因为 g ( x ) ≡ 1 {\displaystyle g(x)\equiv 1} 是一个多项式。
因此,将 L ( x ) {\displaystyle L(x)} 除以 g ( x ) {\displaystyle g(x)} 后可得到:
L ( x ) = ∑ j = 0 k w j x − x j y j ∑ j = 0 k w j x − x j ( 2 ) {\displaystyle L(x)={\frac {\sum _{j=0}^{k}{\frac {w_{j}}{x-x_{j}}}y_{j}}{\sum _{j=0}^{k}{\frac {w_{j}}{x-x_{j}}}}}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (2)} [ 7] 这个公式被称为重心拉格朗日插值公式(第二型)或真正的重心拉格朗日插值公式。它继承了(1)式容易计算的特点,并且在代入x 值计算 L ( x ) {\displaystyle L(x)} 的时候不必计算多项式 ℓ ( x ) {\displaystyle \ell (x)} [ 7] 。它的另一个优点是,结合切比雪夫节点 进行插值的话,可以很好地模拟给定的函数,使得插值点个数趋于无穷时,最大偏差趋于零[ 7] 。同时,重心拉格朗日插值结合切比雪夫节点 进行插值可以达到极佳的数值稳定性。第一型拉格朗日插值是向后稳定 的,而第二型拉格朗日插值是向前稳定的,并且勒贝格常数 很小[ 9] 。
书籍