插值1算法

一、基本概念

插值是指通过对数据进行线性、非线性或其他类型的逼近,将一组离散数据映射到连续的函数值。在数学中,插值通常用于将数据点连接起来,以形成连续的函数图像,特别是在数值计算和图像处理中。插值可以用于在空间中预测对象的位置、速度和加速度,以及在其他领域中实现其他类型的预测和模拟。
φ ( x i ) = y i \varphi (x_{i})=y_{i} φ(xi)=yi(1-1)
f ( x i ) = y i f(x_{i})=y_{i} f(xi)=yi (1-2)

其中,f(x) 称为被插函数; φ ( x ) \varphi (x) φ(x) 称为插值函数; x i x_{i} xi称为插值节点;包含插值节点的区域[a,b]称为插值区间; ( x i , y i ) (x_{i},y_{i}) (xi,yi)称为插值点;公式(1-1)称为插值条件

二、拉格朗日插值

n次多项式插值:
φ n ( x ) = a 0 + a 1 x + a 2 x 2 + ⋯ + a n x n \varphi_{n}(x)=a_{0}+a_{1}x+a_{2}x^{2}+\dots+a_{n}x^{n} φn(x)=a0+a1x+a2x2++anxn (2-1)


1.线性插值

基函数:
l 0 ( x ) = x − x 1 x 0 − x 1 ,    l 1 ( x ) = x − x 0 x 1 − x 0 l_0(x)=\dfrac{x-x_1}{x_0-x_1},\:\:l_1(x)=\dfrac{x-x_0}{x_1-x_0} l0(x)=x0x1xx1,l1(x)=x1x0xx0 (2-2)
插值函数:
φ 1 ( x ) = L 1 ( x ) = y 0 l 0 ( x ) + y 1 l 1 ( x ) \varphi_{1}(x)=L_{1}(x)=y_{0}l_0(x)+y_{1}l_1(x) φ1(x)=L1(x)=y0l0(x)+y1l1(x) (2-3)
误差分析:
R ( x ) = f ( x ) − φ 1 ( x ) = f ′ ′ ( ξ ) 2 ! ( x − x 0 ) ( x − x 1 ) R(x)=f(x)-\varphi_1(x)=\dfrac{f''(\xi)}{2!}(x-x_0)(x-x_1) R(x)=f(x)φ1(x)=2!f′′(ξ)(xx0)(xx1) (2-4)
公式(2-4)称为截断误差公式

2.二次插值

基函数:
l 0 ( x ) = ( x − x 1 ) ( x − x 2 ) ( x 0 − x 1 ) ( x 0 − x 2 ) \quad l_0(x)=\dfrac{(x-x_1)(x-x_2)}{(x_0-x_1)(x_0-x_2)} l0(x)=(x0x1)(x0x2)(xx1)(xx2)
l 1 ( x ) = ( x − x 0 ) ( x − x 2 ) ( x 1 − x 0 ) ( x 1 − x 2 ) \quad l_1(x)=\dfrac{(x-x_0)(x-x_2)}{(x_1-x_0)(x_1-x_2)} l1(x)=(x1x0)(x1x2)(xx0)(xx2)
l 2 ( x ) = ( x − x 0 ) ( x − x 1 ) ( x 2 − x 0 ) ( x 2 − x 1 ) \quad l_2(x)=\dfrac{(x-x_0)(x-x_1)}{(x_2-x_0)(x_2-x_1)} l2(x)=(x2x0)(x2x1)(xx0)(xx1)
插值函数:
φ 2 ( x ) = L 2 ( x ) = l 0 ( x ) y 0 + l 1 ( x ) y 1 + l 2 ( x ) y 2 \varphi_2(x)=L_2(x)=l_0(x)y_0+l_1(x)y_1+l_2(x)y_2 φ2(x)=L2(x)=l0(x)y0+l1(x)y1+l2(x)y2
误差分析:
R ( x ) = f ( x ) − φ 2 ( x ) = f ′ ′ ( ξ ) 3 ! ( x − x 0 ) ( x − x 1 ) ( x − x 2 ) R(x)=f(x)-\varphi_2(x)=\dfrac{f''(\xi)}{3!}(x-x_0)(x-x_1)(x-x_2) R(x)=f(x)φ2(x)=3!f′′(ξ)(xx0)(xx1)(xx2)

3.n次拉格朗日插值多项式

基函数:
A = 1 ( x i − x 0 ) ⋯ ( x i − x i − 1 ) ( x i − x i + 1 ) ⋯ ( x i − x n ) A=\dfrac{1}{(x_i-x_0)\cdots(x_i-x_{i-1})(x_i-x_{i+1})\cdots(x_i-x_n)} A=(xix0)(xixi1)(xixi+1)(xixn)1

l i ( x ) = A ( x − x 0 ) ⋯ ( x − x i − 1 ) ( x − x i + 1 ) ⋯ ( x − x n ) l_i(x)=A(x-x_0)\cdots(x-x_{i-1})(x-x_{i+1})\cdots(x-x_n) li(x)=A(xx0)(xxi1)(xxi+1)(xxn)
插值函数:
L n ( x ) = ∑ i = 0 n y i l i ( x ) L_n(x)=\sum\limits_{i=0}^n y_i l_i(x) Ln(x)=i=0nyili(x)
误差分析:
R ( x ) = f ( x ) − φ n ( x ) = f ( n + 1 ) ( ξ ) ( n + 1 ) ! ( x − x 0 ) ( x − x 1 ) ⋯ ( x − x n ) R(x)=f(x)-\varphi_n(x)=\dfrac{f^{(n+1)}(\xi)}{(n+1)!}(x-x_0)(x-x_1)\cdots(x-x_n) R(x)=f(x)φn(x)=(n+1)!f(n+1)(ξ)(xx0)(xx1)(xxn)
另一种误差分析:
推导过程:
f ( x ) − L n ( 1 ) ( x ) = f ( n + 1 ) ( ξ 1 ) ( n + 1 ) ! ( x − x 0 ) ⋯ ( x − x n ) f ( x ) − L n ( 2 ) ( x ) = f ( n + 1 ) ( ξ n ) ( n + 1 ) ! ( x − x 1 ) ⋯ ( x − x n + 1 ) \begin{array}{c}f(x)-L_n^{(1)}(x)=\dfrac{f^{(n+1)}\big(\xi_1\big)}{(n+1)!}\big(x-x_0\big)\cdots\big(x-x_n\big)\\ \\ f(x)-L_n^{(2)}(x)=\dfrac{f^{(n+1)}\big(\xi_n\big)}{(n+1)!}\big(x-x_1\big)\cdots\big(x-x_{n+1}\big)\end{array} f(x)Ln(1)(x)=(n+1)!f(n+1)(ξ1)(xx0)(xxn)f(x)Ln(2)(x)=(n+1)!f(n+1)(ξn)(xx1)(xxn+1)
得到:
f ( x ) − L n ( 1 ) ( x ) ≈ x − x 0 x 0 − x n + 1 ( L n ( 1 ) ( x ) − L n ( 2 ) ( x ) ) f(x)-L^{(1)}_n(x)\approx\dfrac{x-x_0}{x_0-x_{n+1}}\left(L^{(1)}_n(x)-L^{(2)}_n(x)\right) f(x)Ln(1)(x)x0xn+1xx0(Ln(1)(x)Ln(2)(x))
通过两个插值函数之差来估计误差,这种叫事后估计

缺点:基函数依赖全部节点,增加节点时,需要计算全部基函数

三、牛顿插值法

1.差商

一阶差商:
f [ x 0 , x 1 ] = f ( x 0 ) − f ( x 1 ) x 0 − x 1 f[x_0,x_1]=\dfrac{f(x_0)-f(x_1)}{x_0-x_1} f[x0,x1]=x0x1f(x0)f(x1)
二阶差商:
f [ x 0 , x 1 , x 2 ] = f [ x 0 , x 2 ] − f [ x 0 , x 1 ] x 2 − x 1 f[x_0,x_1,x_2]=\dfrac{f[x_0,x_2]-f[x_0,x_1]}{x_2-x_1} f[x0,x1,x2]=x2x1f[x0,x2]f[x0,x1]
n阶差商:
f [ x 0 , x 1 , ⋯   , x n ] = f [ x 0 , x 1 , ⋯   , x n − 2 , x n ] − f [ x 0 , x 1 , ⋯   , x n − 2 , x n − 1 ] x n − x n − 1 f[x_0,x_1,\cdots,x_n]=\frac{f[x_0,x_1,\cdots,x_{n-2},x_n]-f[x_0,x_1,\cdots,x_{n-2},x_{n-1}]}{x_n-x_{n-1}} f[x0,x1,,xn]=xnxn1f[x0,x1,,xn2,xn]f[x0,x1,,xn2,xn1]

差商表:

x i x_{i} xi f ( x i ) f(x_{i}) f(xi)一阶差商二阶差商三阶差商
x 0 x_{0} x0 f ( x 0 ) f(x_{0}) f(x0)
x 1 x_{1} x1 f ( x 1 ) f(x_{1}) f(x1) f [ x 0 , x 1 ] f[x_{0},x_{1}] f[x0,x1]
x 2 x_{2} x2 f ( x 2 ) f(x_{2}) f(x2) f [ x 1 , x 2 ] f[x_{1},x_{2}] f[x1,x2] f [ x 0 , x 1 , x 2 ] f[x_{0},x_{1},x_{2}] f[x0,x1,x2]
x 3 x_{3} x3 f ( x 3 ) f(x_{3}) f(x3) f [ x 2 , x 3 ] f[x_{2},x_{3}] f[x2,x3] f [ x 1 , x 2 , x 3 ] f[x_{1},x_{2},x_{3}] f[x1,x2,x3] f [ x 0 , x 1 , x 2 , x 3 ] f[x_{0},x_{1},x_{2},x_{3}] f[x0,x1,x2,x3]

2.牛顿插值多项式

牛顿线性插值多项式:
N 1 ( x ) = f [ x 0 ] + f [ x 0 , x 1 ] ( x − x 0 ) N_1(x)=f[x_0]+f[x_0,x_1](x-x_0) N1(x)=f[x0]+f[x0,x1](xx0)
牛顿二次插值多项式:
N 2 ( 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 ) N_{2}(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}) N2(x)=f[x0]+f[x0,x1](xx0)+f[x0,x1,x2](xx0)(xx1)
牛顿插值多项式:
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 n ] ( x − x 0 ) ( x − x 1 ) ⋯ ( x − x n − 1 ) \begin{array}{c}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)+\\ \cdots+f[x_0,x_1,\cdots,x_n](x-x_0)(x-x_1)\cdots(x-x_{n-1})\end{array} Nn(x)=f[x0]+f[x0,x1](xx0)+f[x0,x1,x2](xx0)(xx1)++f[x0,x1,,xn](xx0)(xx1)(xxn1)
特别地:
N n ( x ) = N n − 1 ( x ) + f [ x 0 , x 1 , ⋯   , x n ] ( x − x 0 ) ( x − x 1 ) ⋯ ( x − x n − 1 ) \text{}N_n(x)=N_{n-1}(x)+f[x_0,x_1,\cdots,x_n](x-x_0)(x-x_1)\cdots(x-x_{n-1}) Nn(x)=Nn1(x)+f[x0,x1,,xn](xx0)(xx1)(xxn1)

它跟拉格朗日插值法是等价的,只是表现形式不一样。

3.差分与等距节点的牛顿插值公式

一阶差分:

一阶前向差分:
Δ f ( x i ) = f ( x i + h ) − f ( x i ) \Delta f(x_i)=f(x_i+h)-f(x_i) Δf(xi)=f(xi+h)f(xi)
一阶后向差分:
∇ f ( x i ) = f ( x i ) − f ( x i − h ) \nabla f(x_i)=f(x_i)-f(x_i-h) f(xi)=f(xi)f(xih)
一阶中心差分:
δ f ( x i ) = f ( x i + h 2 ) − f ( x i − h 2 ) \delta f(x_i)=f(x_i+\dfrac{h}{2})-f(x_i-\dfrac{h}{2}) δf(xi)=f(xi+2h)f(xi2h)

二阶差分

二阶前向差分:
Δ 2 f ( x i ) = Δ f ( x i + h ) − Δ f ( x i ) \Delta^2f(x_i)=\Delta f(x_i+h)-\Delta f(x_i) Δ2f(xi)=Δf(xi+h)Δf(xi)
二阶后向差分:
∇ 2 f ( x i )   =   ∇ f ( x i )   −   ∇ f ( x i   −   h ) \nabla^2f(x_i)\:=\:\nabla f(x_i)\:-\:\nabla f(x_i\:-\:h) 2f(xi)=f(xi)f(xih)

n阶差分

n阶前向差分:
Δ n f ( x i ) = Δ n − 1 f ( x i + h ) − Δ n − 1 f ( x i ) \Delta^n f(x_i)=\Delta^{n-1}f(x_i+h)-\Delta^{n-1}f(x_i) Δnf(xi)=Δn1f(xi+h)Δn1f(xi)
n阶后向差分:
∇ n f ( x i ) = ∇ n − 1 f ( x i ) − ∇ f n − 1 ( x i − h ) \nabla^n f(x_i)=\nabla^{n-1}f(x_i)-\nabla f^{n-1}(x_i-h) nf(xi)=n1f(xi)fn1(xih)

差分表,类似于差商表

差分的性质

  1. 等距节点下
    f [ x 0 , x 1 , ⋯   , x n ] = Δ n f ( x 0 ) n ! h n f[x_0,x_1,\cdots,x_n]=\dfrac{\Delta^n f(x_0)}{n!h^n} f[x0,x1,,xn]=n!hnΔnf(x0)
  2. 表示函数值的线性组合
    Δ n f ( x i ) = ∑ j = 0 n ( − 1 ) j C n j f ( x n + i − j ) \Delta^n f(x_i)=\sum_{j=0}^n(-1)^j C_n^j f(x_{n+i-j}) Δnf(xi)=j=0n(1)jCnjf(xn+ij)

等距节点的牛顿插值公式

等距节点的牛顿前插公式:
φ n ( x ) = f ( x 0 ) + x − x 0 h Δ f ( x 0 ) + ( x − x 0 ) ( x − x 1 ) 2 h 2 Δ 2 f ( x 0 ) + ⋯ + ( x − x 0 ) ( x − x 1 ) ⋯ ( x − x n − 1 ) n ! h n Δ n f ( x 0 ) \begin{array}{c}\varphi_n(x)=f(x_0)+\dfrac{x-x_0}{h}\Delta f(x_0)+\dfrac{(x-x_0)(x-x_1)}{2h^2}\Delta^2f(x_0)+\cdots\\ +\dfrac{(x-x_0)(x-x_1)\cdots(x-x_{n-1})}{n!h^n}\Delta^n f(x_0)\end{array} φn(x)=f(x0)+hxx0Δf(x0)+2h2(xx0)(xx1)Δ2f(x0)++n!hn(xx0)(xx1)(xxn1)Δnf(x0)
x = x 0 + t h ,   ( 0   ≤   t   ≤   n ) x=x_{0}+t h,\ (0\:\leq\:t\:\leq\:n) x=x0+th, (0tn)
可以得到:
φ x ( x ) = φ x ( x 0 + t h ) = f ( x 0 ) + t 1 ! ! Δ f ( x 0 ) + t ( t − 1 ) 2 ! Δ 2 f ( x 0 ) + ⋯ + t ( t − 1 ) ⋯ ( t − n + 1 ) n ! Δ ∗ f ( x 0 ) \begin{aligned}\varphi_x(x)&=\varphi_x(x_0+th)\\ &=f(x_0)+\dfrac{t}{1!!}\Delta f(x_0)+\dfrac{t(t-1)}{2!}\Delta^2f(x_0)+\cdots+\dfrac{t(t-1)\cdots(t-n+1)}{n!}\Delta^*f(x_0)\end{aligned} φx(x)=φx(x0+th)=f(x0)+1!!tΔf(x0)+2!t(t1)Δ2f(x0)++n!t(t1)(tn+1)Δf(x0)
对应的截断误差:
R n ( x ) = t ( t − 1 ) ⋯ ( t − n ) ( n + 1 ) ! h n + 1 f ( n + 1 ) ( ξ ) , ξ ∈ ( x 0 , x 0 + n h ) R_{n}(x)=\frac{t(t-1)\cdots(t-n)}{(n+1)!}h^{n+1}f^{(n+1)}(\xi),\quad\xi\in(x_{0,}x_{0}+n h) Rn(x)=(n+1)!t(t1)(tn)hn+1f(n+1)(ξ),ξ(x0,x0+nh)
注意:若 x 0 < x 1 < ⋯ < x n x_0<x_1<\cdots<x_n x0<x1<<xn ,当x靠近x0时,一般采用前插公式来求f(x)
的值,当 x 靠近 xn 时,一般采用后插公式来求 f(x) 的值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值