插值法是一种通过已知数据点来估计未知数据点的方法。它通过构建一个函数或曲线,使其经过已知数据点,从而在数据点之间进行估计或预测。插值法的基本思想是假设已知数据点之间存在某种规律或趋势,并利用这种规律来推断未知数据点的值。通过插值法,我们可以在给定的数据点集合上构建一个连续的函数,从而可以在数据点之间进行插值计算。
需要注意的是,插值法只能在已知数据点之间进行插值,对于超出已知数据范围的数据点,插值结果可能不准确。此外,插值法的选择应根据具体问题和数据特点进行,以获得最佳的插值效果。在理论上,插值多项式确实会经过已知数据点,这是插值方法的基本原理。
数值分析中的插值方法可以根据不同的特点和应用进行分类。以下是几种常见的插值方法分类:
说明:
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 )后会出现较大的误差。
多项式拉格朗日插值:
整体性好,光滑性好(无穷阶连续),但不一定收敛(龙格现象)。
分段多项式拉格朗日插值:
局部性好,光滑性差(折线),收敛性保证。
分段多项式Hermite插值:
局部性好,满足一定光滑性,收敛性保证,但需要导数值信息。
样条插值:
局部性好,满足一定光滑性,收敛性保证,只需要函数值信息。
[!example]-
x ∣ − 1 2 5 y ∣ 3 6 8 \begin{array}{cccccc} x| & -1 & 2 & 5 \\ y| & 3 & 6 & 8 \end{array} x∣y∣−132658
求所有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=x0−x1x−x1⋅x0−x2x−x2=(−1−2)(−1−5)(x−2)(x−5)x1−x0x−x0⋅x1−x2x−x2=(2+1)(2−5)(x+1)(x−5)x2−x0x−x0⋅x2−x1x−x1=(5+1)(5−2)(x+1)(x−2)
定义上,有
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
插值多项式为基函数的线性组合:
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=0∑najlj(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=0∑nyjlj(x)=j=0∑nyji=0,i=j∏n(xj−xi)(x−xi)
[!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⋅(−1−2)(−1−5)(x−2)(x−5)+6⋅(2+1)(2−5)(x+1)(x−5)+8⋅(5+1)(5−2)(x+1)(x−2)
设函数 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} x∣y∣0.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=26−sinξ⋅(x−0.3)(x−0.4)(x−0.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)=y0⋅0.3−0.4x−0.4+y1⋅0.4−0.3x−0.3≈f(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)=2−sinξ⋅(x−0.3)(x−0.4),0.3≤ξ≤0.4⋯(ξ)≤⋯(误差限)
[! example]-
x ∣ − 1 2 5 y ∣ 3 6 8 \begin{array}{cccccc} x| & -1 & 2 & 5 \\ y| & 3 & 6 & 8 \end{array} x∣y∣−132658
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} x−125y=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]=x1−x0y1−y0,f[x1,x2]=x2−x1y2−y1
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]=x2−x0f[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]=xk−x0f[x1,⋯,xk−1,xk]−f[x0,⋯,xk−2,xk−1]
差商的性质如下:
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]⋅(x−x0)+f[x0,x1,x2]⋅(x−x0)(x−x1)+f[x0,x1,x2,x3]⋅(x−x0)(x−x1)(x−x2)⋯
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=0∏n(x−xi)