【数值分析】插值法,lagrange插值,牛顿插值

1. 插值法介绍

插值法是一种通过已知数据点来估计未知数据点的方法。它通过构建一个函数或曲线,使其经过已知数据点,从而在数据点之间进行估计或预测。插值法的基本思想是假设已知数据点之间存在某种规律或趋势,并利用这种规律来推断未知数据点的值。通过插值法,我们可以在给定的数据点集合上构建一个连续的函数,从而可以在数据点之间进行插值计算。
需要注意的是,插值法只能在已知数据点之间进行插值,对于超出已知数据范围的数据点,插值结果可能不准确。此外,插值法的选择应根据具体问题和数据特点进行,以获得最佳的插值效果。在理论上,插值多项式确实会经过已知数据点,这是插值方法的基本原理。

1.1 插值法分类

数值分析中的插值方法可以根据不同的特点和应用进行分类。以下是几种常见的插值方法分类:

  1. 代数多项式插值方法:
    • Lagrange插值:通过构造一个线性多项式,使其通过所有的数据点。
    • Newton插值:利用差商的概念,通过计算差商来优化插值结果。
    • Hermite插值:通过给定数据点的函数值和导数值,构造一个插值多项式。
  2. 分段插值方法:
    • 分段线性插值:使用低次分段函数来插值两个数据点。
    • 分段抛物插值:使用二次多项式来插值三个数据点。
    • 分段三次Hermite保形插值:在分段点处连续可导的前提下,使用三次Hermite插值来插值相邻的数据点。
    • 三次样条插值:使用二阶导数连续的插值曲线来插值数据点。
  3. 其他插值方法:
    • 逆距离加权插值:根据数据点之间的距离和权重来插值未知点的值。
    • 样条插值:使用分段函数来逼近数据点,保证插值曲线的光滑性和连续性。

说明:

  • 基于代数多项式的插值方法得到的插值多项式的相同的,(只有唯一的多项式函数过给定点)。
1.2 代数多项式插值法与范德蒙德矩阵

n {n} n 次插值多项式存在且唯一
以三阶为例,插值多项式过点 ( x 1 , y 1 )    ,    ( x 2 , y 2 )    ,    ( x 3 , y 3 ) (x_1,y_1) \,\,,\,\, (x_2,y_2) \,\,,\,\, (x_3,y_3) (x1,y1),(x2,y2),(x3,y3) 有:
{ y 1 = a 0 + a 1 x 1 + a 2 x 1 2 y 2 = a 0 + a 1 x 2 + a 2 x 2 2 y 3 = a 0 + a 1 x 3 + a 2 x 3 2 \begin{cases} y_1=a_0+a_1x_1+a_2x_1^2 \\ y_2 = a_0+a_1x_2+a_2x_2^2 \\ y_3=a_0+a_1x_3+a_2x_3^2 \end{cases} y1=a0+a1x1+a2x12y2=a0+a1x2+a2x22y3=a0+a1x3+a2x32
[ 1 x 1 x 1 2 1 x 2 x 2 2 1 x 3 x 3 3 ] [ a 0 a 1 a 2 ] = [ y 1 y 2 y 3 ] \begin{bmatrix} 1 & x_1 & x_1^2 \\ 1 & x_2 & x_2^2 \\ 1 & x_3 & x_3^3 \end{bmatrix} \begin{bmatrix} a_0\\a_1\\a_2 \end{bmatrix}=\begin{bmatrix} y_1\\y_2\\y_3 \end{bmatrix} 111x1x2x3x12x22x33 a0a1a2 = y1y2y3
求解系数向量,相当于在求解范德蒙德矩阵转置的线性方程组,由于插值多项式唯一,我们可以直接通过多项式插值来得到该线性方程组的解,但由于龙格现象,范德蒙德矩阵次数较高(大于 9 {9} 9 )后会出现较大的误差。

1.3 插值法比较

多项式拉格朗日插值:
整体性好,光滑性好(无穷阶连续),但不一定收敛(龙格现象)。
分段多项式拉格朗日插值:
局部性好,光滑性差(折线),收敛性保证。
分段多项式Hermite插值:
局部性好,满足一定光滑性,收敛性保证,但需要导数值信息。
样条插值:
局部性好,满足一定光滑性,收敛性保证,只需要函数值信息。


2. Lagrange拉格朗日插值

2.1 拉格朗日插值基函数
  1. 有几个节点就有几个插值基函数
  2. l i n x l_{in} x linx i = 0 , 1 , 2 ⋯   , n i=0,1,2\cdots,n i=0,1,2,n n {n} n 个乘积因子, n + 1 {n+1} n+1 个插值基函数
  3. 每个基函数因子项的分母为 i {i} i 对应的节点 x i {x_i} xi 减去其他所有节点,分子结构相同,把 x i {x_i} xi 换成 x {x} x
    l i ( x ) = ∏ k = 0    ,    k ≠ i n ( x − x k ) ( x i − x k ) l _{i}(x)= \prod_{k=0 \,\,,\,\, k\ne i}^{n } \frac{(x-x_k)}{(x_i-x_k)} li(x)=k=0,k=in(xixk)(xxk)

[!example]-
x ∣ − 1 2 5 y ∣ 3 6 8 \begin{array}{cccccc} x| & -1 & 2 & 5 \\ y| & 3 & 6 & 8 \end{array} xy132658
求所有lagrange插值基函数。
解:
l 0 = x − x 1 x 0 − x 1 ⋅ x − x 2 x 0 − x 2 = ( x − 2 ) ( x − 5 ) ( − 1 − 2 ) ( − 1 − 5 ) l 0 = x − x 0 x 1 − x 0 ⋅ x − x 2 x 1 − x 2 = ( x + 1 ) ( x − 5 ) ( 2 + 1 ) ( 2 − 5 ) l 0 = x − x 0 x 2 − x 0 ⋅ x − x 1 x 2 − x 1 = ( x + 1 ) ( x − 2 ) ( 5 + 1 ) ( 5 − 2 ) \begin{align*} l _{0}=& \frac{x-x_1}{x_0-x_1}\cdot \frac{x-x_2}{x_0-x_2}= \frac{(x-2)(x-5)}{(-1-2)(-1-5)} \\ \\ l _{0}=& \frac{x-x_0}{x_1-x_0}\cdot \frac{x-x_2}{x_1-x_2}= \frac{(x+1)(x-5)}{(2+1)(2-5)} \\ \\ l _{0}=& \frac{x-x_0}{x_2-x_0}\cdot \frac{x-x_1}{x_2-x_1}= \frac{(x+1)(x-2)}{(5+1)(5-2)} \end{align*} l0=l0=l0=x0x1xx1x0x2xx2=(12)(15)(x2)(x5)x1x0xx0x1x2xx2=(2+1)(25)(x+1)(x5)x2x0xx0x2x1xx1=(5+1)(52)(x+1)(x2)

定义上,有
l k ( x i ) = { 1    ,    i = k 0    ,    i ≠ k l_k(x_i)= \begin{cases} 1 \,\,,\,\, i=k \\ 0 \,\,,\,\, i\ne k \end{cases} lk(xi)={1,i=k0,i=k

2.2 拉格朗日插值多项式

插值多项式为基函数的线性组合:
p ( x i ) = ∑ j = 0 n a j l j ( x i ) = y i    ,    i = 0 , 1 , ⋯   , n p(x_i)= \sum_{j=0}^{n} a_jl_{j}(x_i)=y_i \,\,,\,\, i=0,1,\cdots,n p(xi)=j=0najlj(xi)=yi,i=0,1,,n
l k ( x ) l_k(x) lk(x) 的性质有 a i = y i a_i=y_i ai=yi,代入上式得到的公式为拉格朗日插值多项式
L n ( x ) = ∑ j = 0 n y j l j ( x ) = ∑ j = 0 n y j ∏ i = 0    ,    i ≠ j n ( x − x i ) ( x j − x i ) L_n(x)= \sum_{j=0}^{ n}y_jl_j(x)= \sum_{j=0}^{ n}y_j\prod_{i=0 \,\,,\,\, i\ne j}^{n } \frac{(x-x_i)}{(x_j-x_i)} Ln(x)=j=0nyjlj(x)=j=0nyji=0,i=jn(xjxi)(xxi)

[!example]-
仍以之前的例子为例
L 2 ( x ) = 3 ⋅ ( x − 2 ) ( x − 5 ) ( − 1 − 2 ) ( − 1 − 5 ) + 6 ⋅ ( x + 1 ) ( x − 5 ) ( 2 + 1 ) ( 2 − 5 ) + 8 ⋅ ( x + 1 ) ( x − 2 ) ( 5 + 1 ) ( 5 − 2 ) L_2(x)=3\cdot \frac{(x-2)(x-5)}{(-1-2)(-1-5)} +6 \cdot \frac{(x+1)(x-5)}{(2+1)(2-5)}+8 \cdot \frac{(x+1)(x-2)}{(5+1)(5-2)} L2(x)=3(12)(15)(x2)(x5)+6(2+1)(25)(x+1)(x5)+8(5+1)(52)(x+1)(x2)

2.3 插值余项定理

设函数 f ( x ) f(x) f(x) [ a    ,    b ] [a \,\,,\,\, b] [a,b] 上有 n + 1 n+1 n+1 阶导数,则有
R n ( x ) = f ( x ) − L n ( x ) = f ( n + 1 ) ( ξ ) ( n + 1 ) ! ⋅ ω n + 1 ( x ) \begin{align*} R_n(x)= &f(x)-L_n(x) \\ \\ =& \frac{f ^{(n+1)}(\xi)}{(n+1)!} \cdot \omega _{n+1}(x) \end{align*} Rn(x)==f(x)Ln(x)(n+1)!f(n+1)(ξ)ωn+1(x)

[!example]-
f ( x ) = sin ⁡ x f(x)=\sin x f(x)=sinx 的取值表如下,求插值余项,求 sin ⁡ 0.35 = ? \sin 0.35=? sin0.35=?,此时误差(限)多少?
x ∣ 0.3 0.4 0.5 y ∣ y 0 y 1 y 2 \begin{array}{cccccc} x| & 0.3 & 0.4 & 0.5 \\ y| & y_0 & y_1 & y_2 \end{array} xy0.3y00.4y10.5y2
解:
R n ( x ) = f ( n + 1 ) ( ξ ) ( n + 1 ) ! ⋅ ω n + 1 ( x )    ,    n = 2 = − sin ⁡ ξ 6 ⋅ ( x − 0.3 ) ( x − 0.4 ) ( x − 0.5 ) \begin{align*} R_n(x)= & \frac{f ^{(n+1)}(\xi)}{(n+1)!} \cdot \omega _{n+1}(x) \,\,,\,\, n=2\\ \\ =& \frac{-\sin\xi}{6} \cdot (x-0.3)(x-0.4)(x-0.5) \end{align*} Rn(x)==(n+1)!f(n+1)(ξ)ωn+1(x),n=26sinξ(x0.3)(x0.4)(x0.5)
使用一次拉格朗日插值, n = 1 n=1 n=1
L 1 ( x ) = y 0 ⋅ x − 0.4 0.3 − 0.4 + y 1 ⋅ x − 0.3 0.4 − 0.3 ≈ f ( x ) L_1(x)= y_0 \cdot \frac{x-0.4}{0.3-0.4}+y_1 \cdot \frac{x-0.3}{0.4-0.3}\approx f(x) L1(x)=y00.30.4x0.4+y10.40.3x0.3f(x)
L 1 ( 0.35 ) ≈ ⋯ L_1(0.35) \approx \cdots L1(0.35)
R 1 ( x ) = − sin ⁡ ξ 2 ⋅ ( x − 0.3 ) ( x − 0.4 )    ,    0.3 ≤ ξ ≤ 0.4 R 1 ( 0.35 ) = ⋯ ( ξ ) ≤ ⋯ ( 误差限 ) \begin{align*} R_1(x)= &\frac{-\sin\xi}{2} \cdot (x-0.3)(x-0.4) \,\,,\,\, 0.3 \le\xi\le0.4\\ \\ R_1(0.35)= & \cdots(\xi)\le \cdots( \text{误差限} ) \end{align*} R1(x)=R1(0.35)=2sinξ(x0.3)(x0.4),0.3ξ0.4(ξ)(误差限)


3. 牛顿插值

3.1 差商表

[! example]-
x ∣ − 1 2 5 y ∣ 3 6 8 \begin{array}{cccccc} x| & -1 & 2 & 5 \\ y| & 3 & 6 & 8 \end{array} xy132658
x y = f ( x ) 一阶差商 二阶差商 − 1 3 f [ x 0 , x 1 ] f [ x 0 , x 1 , x 2 ] 2 6 f [ x 1 , x 2 ] 5 8 \begin{array}{cccccc} x & y=f(x) & \text{一阶差商} & \text{二阶差商} \\ -1 & 3 & f[x_0,x_1]&f[x_0,x_1,x_2]\\ 2&6&f[x_1,x_2]\\ 5&8 \end{array} x125y=f(x)368一阶差商f[x0,x1]f[x1,x2]二阶差商f[x0,x1,x2]
f [ x 0 . x 1 ] = y 1 − y 0 x 1 − x 0    ,    f [ x 1 , x 2 ] = y 2 − y 1 x 2 − x 1 f[x_0.x_1]= \frac{y_1-y_0}{x_1-x_0} \,\,,\,\, f[x_1,x_2]= \frac{y_2-y_1}{x_2-x_1} f[x0.x1]=x1x0y1y0,f[x1,x2]=x2x1y2y1
f [ x 0 , x 1 , x 2 ] = f [ x 1 . x 2 ] − f [ x 0 , x 1 ] x 2 − x 0 f[x_0,x_1,x_2]= \frac{f[x_1.x_2]-f[x_0,x_1]}{x_2-x_0} f[x0,x1,x2]=x2x0f[x1.x2]f[x0,x1]

同济自己编的教材和市面上其他教材对差商的定义看起来不太一样,但实际上是等价的。 k k k 阶差商定义如下
f [ x 0 , x 1 , ⋯   , x k ] = f [ x 1 , ⋯   , x k − 1 , x k ] − f [ x 0 , ⋯   , x k − 2 , x k − 1 ] x k − x 0 f[x_0,x_1, \cdots,x_k]= \frac{f[x_1, \cdots,x_{k-1},x_k]-f[x_0, \cdots,x_{k-2},x_{k-1}]}{x_k-x_0} f[x0,x1,,xk]=xkx0f[x1,,xk1,xk]f[x0,,xk2,xk1]
差商的性质如下:

  1. 差商可以表示为函数值的线性组合
    f [ x 0 , x 1 , ⋯   , x k ] = ∑ j = 0 k f ( x j ) ( x j − x 0 ) ⋯ ( x j − x j − 1 ) ( x j − x j + 1 ) ⋯ ( x j − x k ) f[x_0,x_1, \cdots,x_k]= \sum_{j=0}^{ k} \frac{f(x_j)}{(x_j-x_0) \cdots(x_j-x_{j-1})(x_j-x_{j+1}) \cdots(x_j-x_k)} f[x0,x1,,xk]=j=0k(xjx0)(xjxj1)(xjxj+1)(xjxk)f(xj)
  2. 差商关于所含节点是对称的,交换次序差商不变
    f [ x 0 , ⋯   , x i , ⋯   , x j , ⋯   , x k ] = f [ x 0 , ⋯   , x j , ⋯   , x i , ⋯   , x k ] f[x_0, \cdots,x_i, \cdots,x_j, \cdots,x_k]=f[x_0, \cdots,x_j, \cdots,x_i, \cdots,x_k] f[x0,,xi,,xj,,xk]=f[x0,,xj,,xi,,xk]
  3. 差商和导数的关系
    f [ x 0 , x 1 , ⋯   , x n ] = f ( n ) ( ξ ) n !    ,    ξ ∈ ( a    ,    b ) f[x_0,x_1, \cdots,x_n]= \frac{f^{(n)}(\xi)}{n!} \,\,,\,\, \xi\in(a \,\,,\,\, b) f[x0,x1,,xn]=n!f(n)(ξ),ξ(a,b)
3.2 牛顿插值公式

N n ( x ) = f ( x 0 ) + f [ x 0 , x 1 ] ⋅ ( x − x 0 ) + f [ x 0 , x 1 , x 2 ] ⋅ ( x − x 0 ) ( x − x 1 ) + f [ x 0 , x 1 , x 2 , x 3 ] ⋅ ( x − x 0 ) ( x − x 1 ) ( x − x 2 ) ⋯ \begin{align*} N_n(x)=&f(x_0)+f[x_0,x_1] \cdot (x-x_0) \\ \\ &+f[x_0,x_1,x_2] \cdot (x-x_0)(x-x_1) \\ \\ &+f[x_0,x_1,x_2,x_3] \cdot (x-x_0)(x-x_1)(x-x_2) \cdots \end{align*} Nn(x)=f(x0)+f[x0,x1](xx0)+f[x0,x1,x2](xx0)(xx1)+f[x0,x1,x2,x3](xx0)(xx1)(xx2)

3.3 牛顿插值余项

R n ( x ) = f ( X ) − N n ( X ) = f [ x 0 , x 1 , ⋯   , x n , x ] ∏ i = 0 n ( x − x i ) R_n(x)=f(X)-N_n(X)=f[x_0,x_1, \cdots,x_n,x] \prod_{i=0}^{ n}(x-x_i) Rn(x)=f(X)Nn(X)=f[x0,x1,,xn,x]i=0n(xxi)

你可能感兴趣的:(数值分析,数值分析,插值法)