在數值分析 中,拉格朗日插值法 是以法國 18世紀數學家 約瑟夫·拉格朗日 命名的一種多項式插值 方法。許多實際問題中都用函數 來表示各結果之間某種內在聯繫或規律,而不少函數都只能通過繁複實驗和多次觀測來了解。而,如果對實踐中的某個物理 量進行觀測,在若干個不同的地方得到相應的觀測值,拉格朗日插值法可以找到一個多項式 ,其恰好在各個觀測的點取到觀測到的值。上面這樣的多項式就稱為拉格朗日(插值)多項式 (Lagrange polynomial)。數學 上來說,拉格朗日插值法可以給出一個恰好穿過二維平面 上若干個已知點的多項式函數。拉格朗日插值法最早被英國 數學家愛德華·華林 於1779年發現[ 1] ,不久後(1783年)由萊昂哈德·歐拉 再次發現。1795年,拉格朗日在其著作《師範學校數學基礎教程》中發表這個插值方法,從此他的名字就和這個方法聯繫在一起[ 2] 。
已知平面上4個點:(−9, 5) , (−4, 2) , (−1, −2) , (7, 9) ,拉格朗日多項式:L (x ) (黑色)穿過所有點。而每個基本多項式:y0 ℓ 0 (x ) , y1 ℓ 1 (x ) , y2 ℓ 2 (x ) 以及y3 ℓ 3 (x ) 各穿過對應的一點,並在其它的三個點的x 值上取零。
對於給定的若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] 。這類現象也被稱為龍格現象 ,解決的辦法是分段用較低次數的插值多項式。