Lagrange(拉格朗日)插值法

Lagrange插值法是一种多项式插值方法。

1. 线性插值(两点插值或一次插值)

线性插值就是通过两个采样点 ( x 0 , y 0 ) (x_0,y_0) (x0​,y0​)和 ( x 1 , y 1 ) (x_1,y_1) (x1​,y1​),作一直线 p 1 ( x ) p_1(x) p1​(x)来近似代替 f ( x ) f(x) f(x)。根据插值条件(定义1),有
p 1 ( x 0 ) = y 0 , p 1 ( x 1 ) = y 1 p_1(x_0)=y_0, \quad p_1(x_1)=y_1 p1​(x0​)=y0​,p1​(x1​)=y1​
因此,可以写出直线 p 1 ( x ) p_1(x) p1​(x)的以下两种表达式:

(1)点斜式: p 1 ( x ) = y 0 + y 1 − y 0 x 1 − x 0 ( x − x 0 ) p_1(x)=y_0+\frac{y_1-y_0}{x_1-x_0}(x-x_0) p1​(x)=y0​+x1​−x0​y1​−y0​​(x−x0​)

(2)对称式: p 1 ( x ) = x − x 1 x 0 − x 1 y 0 + x − x 0 x 1 − x 0 y 1 p_1(x)=\frac{x-x_1}{x_0-x_1}y_0+\frac{x-x_0}{x_1-x_0}y_1 p1​(x)=x0​−x1​x−x1​​y0​+x1​−x0​x−x0​​y1​

在点斜式中, y 1 − y 0 x 1 − x 0 \frac{y_1-y_0}{x_1-x_0} x1​−x0​y1​−y0​​即为差商,即当 x 1 → x 0 x_1\to x_0 x1​→x0​时,它就是 y 0 ′ y_0' y0′​。将其代入点斜式方程中,可得到 p 1 ( x ) p_1(x) p1​(x)的极限形式:
p 1 ( x ) = y 0 + y 0 ′ ( x − x 0 ) p_1(x)=y_0+y_0'(x-x_0) p1​(x)=y0​+y0′​(x−x0​)
这就是一阶Taylor(泰勒)多项式。在这里, p 1 ( x ) p_1(x) p1​(x)由两项组成:一项是x的零次多项式,另一项为x的一次多项式。 p 1 ( x ) p_1(x) p1​(x)的这种组成形式就是后面将要介绍的Newton(牛顿)插值公式的形式。

在对称式中,若令
x − x 1 x 0 − x 1 = l 0 ( x ) , x − x 0 x 1 − x 0 = l 1 ( x ) (1) \frac{x-x_1}{x_0-x_1}=l_0(x), \quad \frac{x-x_0}{x_1-x_0}=l_1(x) \tag{1} x0​−x1​x−x1​​=l0​(x),x1​−x0​x−x0​​=l1​(x)(1)
则有
p 1 ( x ) = l 0 ( x ) ⋅ y 0 + l 1 ( x ) ⋅ y 1 (2) p_1(x)=l_0(x)·y_0+l_1(x)·y_1 \tag{2} p1​(x)=l0​(x)⋅y0​+l1​(x)⋅y1​(2)
(1)和(2)式就是线性插值公式。其中, l 0 ( x ) l_0(x) l0​(x)和 l 1 ( x ) l_1(x) l1​(x)是关于x的线性多项式,称之为插值基函数。它们在节点 x 0 x_0 x0​和 x 1 x_1 x1​处分别满足:
l 0 ( x 0 ) = 1 , l 0 ( x 1 ) = 0 l 1 ( x 0 ) = 0 , l 1 ( x 1 ) = 1 l_0(x_0)=1, \quad l_0(x_1)=0 \\ l_1(x_0)=0, \quad l_1(x_1)=1 l0​(x0​)=1,l0​(x1​)=0l1​(x0​)=0,l1​(x1​)=1
于是,可得出重要结论:满足插值条件 p 1 ( x 0 ) = y 0 , p 1 ( x 1 ) = y 1 p_1(x_0)=y_0,p_1(x_1)=y_1 p1​(x0​)=y0​,p1​(x1​)=y1​的一次插值多项式 p 1 ( x ) p_1(x) p1​(x),可用两个插值基函数 l 0 ( x ) l_0(x) l0​(x)和 l 1 ( x ) l_1(x) l1​(x)进行线性组合构造。即
p 1 ( x ) = l 0 ( x ) ⋅ y 0 + l 1 ( x ) ⋅ y 1 p_1(x)=l_0(x)·y_0+l_1(x)·y_1 p1​(x)=l0​(x)⋅y0​+l1​(x)⋅y1​

2. 抛物插值(三点插值或二次插值)

抛物插值就是通过3个采样点 ( x 0 , y 0 ) , ( x 1 , y 1 ) (x_0,y_0),(x_1,y_1) (x0​,y0​),(x1​,y1​)和 ( x 2 , y 2 ) (x_2,y_2) (x2​,y2​)构造一个二次多项式 p 2 ( x ) p_2(x) p2​(x)来近似代替 f ( x ) f(x) f(x)。根据插值条件(定义1),有:
p 2 ( x ) = y , ( i = 0 , 1 , 2 ) p_2(x)=y, \quad(i=0,1,2) p2​(x)=y,(i=0,1,2)
因此,根据插值条件,用待定系数法可以确定出二次多项式 p 2 ( x ) = a 0 + a 1 x + a 2 x 2 p_2(x)=a_0+a_1x+a_2x^2 p2​(x)=a0​+a1​x+a2​x2的各个系数。这里为避免解方程组,使用基函数线性组合的构造方法来求二次多项式 p 2 ( x ) p_2(x) p2​(x)。由线性插值的结论推广可知。该二次多项式 p 2 ( x ) p_2(x) p2​(x)可用3个插值基函数 l 0 ( x ) , l 1 ( x ) l_0(x),l_1(x) l0​(x),l1​(x)和 l 2 ( x ) l_2(x) l2​(x)进行线性组合构造。即:
p 2 ( x ) = l 0 ( x ) ⋅ y 0 + l 1 ( x ) ⋅ y 1 + l 2 ( x ) ⋅ y 2 (3) p_2(x)=l_0(x)·y_0+l_1(x)·y_1+l_2(x)·y_2 \tag{3} p2​(x)=l0​(x)⋅y0​+l1​(x)⋅y1​+l2​(x)⋅y2​(3)
3个插值基函数在插值节点 x 0 , x 1 x_0,x_1 x0​,x1​和 x 2 x_2 x2​处应该分别满足:
l 0 ( x 0 ) = 1 l 0 ( x 1 ) = 0 l 0 ( x 2 ) = 0 l 1 ( x 0 ) = 0 l 1 ( x 1 ) = 1 l 1 ( x 2 ) = 0 l 2 ( x 0 ) = 0 l 2 ( x 1 ) = 0 l 2 ( x 2 ) = 1 l_0(x_0)=1 \quad l_0(x_1)=0 \quad l_0(x_2)=0 \\ l_1(x_0)=0 \quad l_1(x_1)=1 \quad l_1(x_2)=0 \\ l_2(x_0)=0 \quad l_2(x_1)=0 \quad l_2(x_2)=1 l0​(x0​)=1l0​(x1​)=0l0​(x2​)=0l1​(x0​)=0l1​(x1​)=1l1​(x2​)=0l2​(x0​)=0l2​(x1​)=0l2​(x2​)=1
即只要确定出3个插值基函数即可。

根据 l 0 ( x 1 ) = l 0 ( x 2 ) = 0 l_0(x_1)=l_0(x_2)=0 l0​(x1​)=l0​(x2​)=0,可假设 l 0 ( x ) = C ( x − x 1 ) ( x − x 2 ) l_0(x)=C(x-x_1)(x-x_2) l0​(x)=C(x−x1​)(x−x2​);将 l 0 ( x 0 ) = 1 l_0(x_0)=1 l0​(x0​)=1代入,得:
C ( x 0 − x 1 ) ( x 0 − x 2 ) = 1 C(x_0-x_1)(x_0-x_2)=1 C(x0​−x1​)(x0​−x2​)=1

C = 1 ( x 0 − x 1 ) ( x 0 − x 2 ) C=\frac{1}{(x_0-x_1)(x_0-x_2)} C=(x0​−x1​)(x0​−x2​)1​
所以
l 0 ( x ) = ( x − x 1 ) ( x − x 2 ) ( x 0 − x 1 ) ( x 0 − x 2 ) (4) l_0(x)=\frac{(x-x_1)(x-x_2)}{(x_0-x_1)(x_0-x_2)} \tag{4} l0​(x)=(x0​−x1​)(x0​−x2​)(x−x1​)(x−x2​)​(4)
同理
l 1 ( x ) = ( x − x 0 ) ( x − x 1 ) ( x 2 − x 0 ) ( x 2 − x 1 ) (5) l_1(x)=\frac{(x-x_0)(x-x_1)}{(x_2-x_0)(x_2-x_1)} \tag{5} l1​(x)=(x2​−x0​)(x2​−x1​)(x−x0​)(x−x1​)​(5)

l 2 ( x ) = ( x − x 0 ) ( x − x 1 ) ( x 2 − x 0 ) ( x 2 − x 1 ) (6) l_2(x)=\frac{(x-x_0)(x-x_1)}{(x_2-x_0)(x_2-x_1)} \tag{6} l2​(x)=(x2​−x0​)(x2​−x1​)(x−x0​)(x−x1​)​(6)

这样,由(3)、(4)、(5)和(6)式就构成了抛物插值公式。即:
p 2 ( x ) = ( x − x 1 ) ( x − x 2 ) ( x 0 − x 1 ) ( x 0 − x 2 ) ⋅ y 0 + ( x − x 0 ) ( x − x 1 ) ( x 1 − x 0 ) ( x 1 − x 2 ) ⋅ y 1 + ( x − x 0 ) ( x − x 1 ) ( x 2 − x 0 ) ( x 2 − x 1 ) ⋅ y 2 p_2(x)=\frac{(x-x_1)(x-x_2)}{(x_0-x_1)(x_0-x_2)}·y_0 + \frac{(x-x_0)(x-x_1)}{(x_1-x_0)(x_1-x_2)}·y_1+\frac{(x-x_0)(x-x_1)}{(x_2-x_0)(x_2-x_1)}·y_2 p2​(x)=(x0​−x1​)(x0​−x2​)(x−x1​)(x−x2​)​⋅y0​+(x1​−x0​)(x1​−x2​)(x−x0​)(x−x1​)​⋅y1​+(x2​−x0​)(x2​−x1​)(x−x0​)(x−x1​)​⋅y2​
所以,抛物插值公式由3个二次插值基函数线性组合而成。

3. Lagrange插值

Lagrange插值法就是通过多个采样点 ( x i , y i ) ( i = 0 , 1 , 2 , ⋯ , n ) (x_i,y_i)(i=0,1,2,\cdots,n) (xi​,yi​)(i=0,1,2,⋯,n)构造一个高次多项式 p ( x ) p(x) p(x)来近似代替 f ( x ) f(x) f(x)。关于插值节点数和多项式次数之间的关系,有如下定理:

定理1:在 n + 1 n+1 n+1个互异的插值节点 x 0 , x 1 , x 2 , ⋯ , x n x_0,x_1,x_2,\cdots,x_n x0​,x1​,x2​,⋯,xn​上,满足插值条件定义1式并且次数不高于n的代数多项式 p n ( x ) = a n x n + a n − 1 x n − 1 + ⋯ + a 1 x + a 0 p_n(x)=a_nx^n+a_{n-1}x^{n-1}+\cdots+a_1x+a_0 pn​(x)=an​xn+an−1​xn−1+⋯+a1​x+a0​存在且惟一。

证明:根据插值条件,有:
{ p n ( x 0 ) = a 0 + a 1 x 0 + a 2 x 0 2 + ⋯ + a n x 0 n = y 0 p n ( x 1 ) = a 0 + a 1 x 1 + a 2 x 1 2 + ⋯ + a n x 1 n = y 1 ⋮ p n ( x n ) = a 0 + a 1 x n + a 2 x n 2 + ⋯ + a n x n n = y n \begin{cases} p_n(x_0)=a_0+a_1x_0+a_2x_0^2+\cdots+a_nx_0^n=y_0 \\ p_n(x_1)=a_0+a_1x_1+a_2x_1^2+\cdots+a_nx_1^n=y_1 \\ \vdots \\ p_n(x_n)=a_0+a_1x_n+a_2x_n^2+\cdots+a_nx_n^n=y_n \end{cases} ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧​pn​(x0​)=a0​+a1​x0​+a2​x02​+⋯+an​x0n​=y0​pn​(x1​)=a0​+a1​x1​+a2​x12​+⋯+an​x1n​=y1​⋮pn​(xn​)=a0​+a1​xn​+a2​xn2​+⋯+an​xnn​=yn​​
该式是一个关于未知数 a 0 , a 1 , a 2 , ⋯ , a n a_0,a_1,a_2,\cdots,a_n a0​,a1​,a2​,⋯,an​的线性方程组,其系数矩阵的行列式是Vandermonde(范德蒙)行列式:
V = ∣ 1 x 0 x 0 2 ⋯ x 0 n 1 x 1 x 1 2 ⋯ x 1 n ⋮ ⋮ ⋮ ⋮ ⋮ 1 x n x n 2 ⋯ x n n ∣ = ∏ n ≥ i > j ≥ 1 ( x i − x j ) V = \begin{vmatrix} 1 & x_0 & x_0^2 & \cdots & x_0^n \\ 1 & x_1 & x_1^2 & \cdots & x_1^n \\ \vdots &\vdots &\vdots &\vdots &\vdots\\ 1 & x_n & x_n^2 & \cdots & x_n^n \end{vmatrix} = \prod_{n\geq i>j\geq1}(x_i-x_j) V=∣∣∣∣∣∣∣∣∣​11⋮1​x0​x1​⋮xn​​x02​x12​⋮xn2​​⋯⋯⋮⋯​x0n​x1n​⋮xnn​​∣∣∣∣∣∣∣∣∣​=n≥i>j≥1∏​(xi​−xj​)
因为 x i ≠ x j ( i ≠ j ) x_i\neq x_j(i\neq j) xi​​=xj​(i​=j),所以 V ≠ 0 V\neq 0 V​=0。根据Gramer法则,该线性方程组有惟一解 a 0 , a 1 , a 2 , ⋯ , a n a_0,a_1,a_2,\cdots,a_n a0​,a1​,a2​,⋯,an​,从而 p n ( x ) p_n(x) pn​(x)存在且惟一。

根据定理1,由n+1个采样点可以惟一第构造出一个次数不高于n的插值多项式 p n ( x ) p_n(x) pn​(x)。在构造该插值多项式时,同样采用基函数线性组合的构造方法。可认为该插值多项式 p n ( x ) p_n(x) pn​(x)由n+1个插值基函数线性组合而成,其组合系数就是对应插值节点上的函数值 y i ( i = 0 , 1 , 2 , ⋯ , n ) y_i(i=0,1,2,\cdots,n) yi​(i=0,1,2,⋯,n),即:
p n ( x ) = l 0 ( x ) y 0 + l 1 ( x ) y 1 + ⋯ + l k ( x ) y k + ⋯ + l n ( x ) y n p_n(x)=l_0(x)y_0+l_1(x)y_1+\cdots+l_k(x)y_k+\cdots+l_n(x)y_n pn​(x)=l0​(x)y0​+l1​(x)y1​+⋯+lk​(x)yk​+⋯+ln​(x)yn​

p n ( x ) = ∑ i = 0 n l i ( x ) y i (7) p_n(x)=\sum_{i=0}^nl_i(x)y_i \tag{7} pn​(x)=i=0∑n​li​(x)yi​(7)
在插值节点 x i x_i xi​上,该多项式满足插值条件:
p n ( x i ) = y i , ( i = 0 , 1 , 2 , ⋯ , k , ⋯ , n ) p_n(x_i)=y_i, \quad (i=0,1,2,\cdots,k,\cdots,n) pn​(xi​)=yi​,(i=0,1,2,⋯,k,⋯,n)
因此,为了使插值条件成立,这n+1个插值基函数 l i ( x ) ( i = 0 , 1 , 2 , ⋯ , k , ⋯ , n ) l_i(x)(i=0,1,2,\cdots,k,\cdots,n) li​(x)(i=0,1,2,⋯,k,⋯,n)在n+1个插值节点上必须分别满足:
l i ( x k ) = { 0 , k ≠ i 1 , k = i l_i(x_k)=\begin{cases} 0, & k\neq i \\ 1, & k=i \end{cases} li​(xk​)={0,1,​k​=ik=i​
因此,插值基函数 l i ( x ) l_i(x) li​(x)有一个非零点 x i x_i xi​和n个零点 x 0 , x 1 , ⋯ , x i − 1 , x i + 1 , x n x_0,x_1,\cdots,x_{i-1},x_{i+1},x_n x0​,x1​,⋯,xi−1​,xi+1​,xn​,即可设
l i ( x ) = ( x − x 0 ) ( x − x i ) ⋯ ( x − x i − 1 ) ⋅ C ⋅ ( x − x i + 1 ) ⋯ ( x − x n ) = C ∏ k = 0 , k ≠ i n ( x − x k ) l_i(x)=(x-x_0)(x-x_i)\cdots(x-x_{i-1})·C·(x-x_{i+1})\cdots (x-x_n)=C\prod_{k=0, k\neq i}^n(x-x_k) li​(x)=(x−x0​)(x−xi​)⋯(x−xi−1​)⋅C⋅(x−xi+1​)⋯(x−xn​)=Ck=0,k​=i∏n​(x−xk​)
再由 l i ( x i ) = 1 l_i(x_i)=1 li​(xi​)=1,即可确定它的常系数为 C = 1 ∏ k = 0 , k ≠ i ( x i − x k ) C=\frac{1}{\prod_{k=0,k\neq i}(x_i-x_k)} C=∏k=0,k​=i​(xi​−xk​)1​,最后得到插值基函数为:
l i ( x ) = ∏ k = 0 , k ≠ i n ( x − x k ) ∏ k = 0 , k ≠ i n ( x i − x k ) = ∏ k = 0 , k ≠ i n x − x k x i − x k ( i = 0 , 1 , 2 , ⋯ , n ) l_i(x)=\frac{\prod_{k=0,k\neq i}^n(x-x_k)}{\prod_{k=0,k\neq i}^n(x_i-x_k)}=\prod_{k=0,k\neq i}^n\frac{x-x_k}{x_i-x_k} \quad(i=0,1,2,\cdots,n) li​(x)=∏k=0,k​=in​(xi​−xk​)∏k=0,k​=in​(x−xk​)​=k=0,k​=i∏n​xi​−xk​x−xk​​(i=0,1,2,⋯,n)
这样就可得到n+1个插值基函数 l i ( x ) ( i = 0 , 1 , 2 , ⋯ , n ) l_i(x)(i=0,1,2,\cdots,n) li​(x)(i=0,1,2,⋯,n),代入(7)式,就得到Lagrange插值公式:
p n ( x ) = ∑ i = 0 n l i ( x ) ⋅ y i = ∑ i = 0 n ( ∏ k = 0 , k ≠ i n x − x k x i − x k ) ⋅ y i (8) p_n(x)=\sum_{i=0}^nl_i(x)·y_i=\sum_{i=0}^n(\prod_{k=0,k\neq i}^n\frac{x-x_k}{x_i-x_k})·y_i \tag{8} pn​(x)=i=0∑n​li​(x)⋅yi​=i=0∑n​(k=0,k​=i∏n​xi​−xk​x−xk​​)⋅yi​(8)
Lagrange插值公式具有以下特点:

(1)对称性: p n ( x ) p_n(x) pn​(x)与插值节点的排列顺序无关,只与 ( x i , y i ) ( i = 0 , 1 , 2 , ⋯ , n ) (x_i,y_i)(i=0,1,2,\cdots,n) (xi​,yi​)(i=0,1,2,⋯,n)有关。

(2)n=1为线性插值公式,n=2为抛物插值公式。

(3)当插值节点数变化时,基函数需要重新计算。

线性插值、抛物插值、Lagrange插值 | Lagrange拉格朗日插值法(一)相关推荐

  1. 拉格朗日插值的优缺点_拉格朗日插值法(图文详解)

    对某个多项式函数,已知有给定的k + 1个取值点: 其中 对应着自变量的位置,而 对应着函数在这个位置的取值. 假设任意两个不同的xj都互不相同,那么应用拉格朗日插值公式所得到的拉格朗日插值多项式为: ...

  2. 拉格朗日插值的优缺点_拉格朗日插值法与牛顿插值法的比较

    第 1 页 共 7 页 拉格朗日插值法与牛顿插值法的比较 [ 摘 要 ] 在生产和科研中出现的函数是多样的.对于一些函数很难找出其解析表达式.即使在某些情况下,可以写出函 数的解析表达式,但由于解析表 ...

  3. 拉格朗日插值的优缺点_拉格朗日插值的优缺点_拉格朗日插值法与牛顿插值法的比较...

    第 1 页 共 7 页 拉格朗日插值法与牛顿插值法的比较 [ 摘 要 ] 在生产和科研中出现的函数是多样的.对于一些函数很难找出其解析表达式.即使在某些情况下,可以写出函 数的解析表达式,但由于解析表 ...

  4. 拉格朗日插值程序C语言,拉格朗日插值法 C语言实现

    /* *作者:KDF5000 *功能:利用拉格朗日插值法求解近似值 *时间:2013.4.15 */ #include #include #include //存放插值节点 struct Data{ ...

  5. 对于多复杂数据的插值最优方法---拉格朗日插值法。

    拉格朗日插值法(图文详解) 在数值分析中,拉格朗日插值法是以法国十八世纪数学家约瑟夫·拉格朗日命名的一种多项式插值方法.许多实际问题中都用函数来表示某种内在联系或规律,而不少函数都只能通过实验和观测来 ...

  6. [模型]拉格朗日插值法

    文章目录 1 拉格朗日插值法的适用场景 2 拉格朗日插值法的基本原理 3 拉格朗日插值多项式的构建 5 拉格朗日插值法补全数据实现 5.1 Python 实现 6 插值效果验证 7 拉格朗日插值法算法 ...

  7. 【数值分析】拉格朗日插值法

    在数值分析中,拉格朗日插值法是以法国十八世纪数学家约瑟夫·拉格朗日命名的一种多项式插值方法.许多实际问题中都用函数来表示某种内在联系或规律,而不少函数都只能通过实验和观测来了解.如对实践中的某个物理量 ...

  8. 机器学习数据预处理之缺失值:插值法填充+ lagrange插值+拉格朗日插值

    机器学习数据预处理之缺失值:插值法填充+ lagrange插值+拉格朗日插值 garbage in, garbage out. 没有高质量的数据,就没有高质量的数据挖掘结果,数据值缺失是数据分析中经常 ...

  9. c语言插值法编程,Lagrange插值的C语言编程.pdf

    Lagrange插值的C语言编程 线性插值 给出两点(x , y ),i 0,1 ,则有线性插值函数 i i x −x x −x 1 0 L (x ) l (x )y =+l (x )y y =+ y ...

最新文章

  1. Android中出现内存泄露的原因
  2. WSAStartup函数
  3. 一个用户实体应该有它自己的实体验证,即一个实体应该有它的属性,方法,扩展属性及验证机制组成...
  4. asp.net C#生成和解析二维码代码
  5. CTFshow php特性 web108
  6. Mysql判断字符串存在性find_in_set
  7. 你真的了解 “开源” 么?请查收【保姆级】开源百科
  8. 【实用工具】交叉编译android版本的GDB
  9. 这辈子最难忘的一顿饭是什么?
  10. 同一个tomcat部署多个项目导致启动失败
  11. Codeforces Beta Round #1:B. Spreadsheets
  12. python随机森林回归数据实战
  13. P3369普通平衡树
  14. 小马过河(计算几何)
  15. tt服务器系统,TT服务器使用手册.doc
  16. 墨水染色之广度优先搜索(C语言实现)
  17. 完美解决丨1. **`SyntaxError: invalid syntax`**
  18. WebRTC 实现P2P音视频通话——搭建信令服务器
  19. 2016SDAU编程练习二1009
  20. coj_1224: ACM小组的古怪象棋

热门文章

  1. 多目标规划问题的解法
  2. win10本地搜索应用没反应怎么解决?
  3. Windows8安装Visual Studio 2012的方法
  4. html 表格自动编号,excel表格批量自动编号
  5. java交付工程师发展前景,看完没有不懂的
  6. OpenVINO-yolov5推理代码
  7. handlebars是什么
  8. diagrams 一个完全可以代替visio的软件
  9. 什么是Cookie和Session?—— Cookie和Session的区别?—— 一文教你理解清楚什么是Cookie和Session,以及常见的开发面试问题?
  10. 完整的struts2框架应用实例