多项式插值与样条插值的解释与示例(matlab)

插值介绍

信号插值,就是用已知点的测量值估计未知点的近似值。信号插值算法的应用范围有:

  • 提高显示效果;
  • 节省硬件成本,以软代硬;
  • 减少远距离、大量数据通信的需要;
  • 进行数据、图像解压缩
  • 求解微分方程、积分方程;
  • 计算函数值、零点、极值点、导数以及积分。

插值与拟合的异同点:

  • 相同点:插值已知一些离散点,在一定约束下,求取定义在连续集合上的未知连续函数。
  • 在图像上面不同:插值在图像上是一定得通过这些点,而拟合是拟合在图像上是逼近这些点。
  • 在几何含义上不同:插值是找到一个(或几个分片光滑的)连续曲面来穿过这些点,拟合是给定了空间中的一些点,找到一个已知形式 未知参数的连续曲面来最大限度地逼近这些点。

多项式插值

对于n+1个点,我们可以找到一个次数不超过n的插值多项式: f = a n ∗ X n + a ( n − 1 ) ∗ X n − 1 + ⋯ + a 1 ∗ X + a 0 f=an*X^{n}+a(n-1) * X^{n-1}+\dots+a1*X+a0 f=anXn+a(n1)Xn1++a1X+a0,可以通过求解n+1个方程组(如方程组\ref{多项式拟合方程组}),得到 a 0 , a 1 , a 2 , … a_0,a_1,a_2,\dots a0,a1,a2,
{ y 1 = a 0 + a 1 x 1 + ⋯ + a n + 1 x 1 n y 2 = a 0 + a 1 x 2 + ⋯ + a n + 1 x 2 n … y n + 1 = a 0 + a 1 x n + 1 + ⋯ + a n + 1 x n + 1 n \left\{\begin{aligned} y_1&=a_0+a_1x_1+\dots+a_{n+1}x_1^{n}\\ y_2&=a_0+a_1x_2+\dots+a_{n+1}x_2^{n}\\ &\dots\\ y_{n+1}&=a_0+a_1x_{n+1}+\dots+a_{n+1}x_{n+1}^{n}\\ \end{aligned}\right. y1y2yn+1=a0+a1x1++an+1x1n=a0+a1x2++an+1x2n=a0+a1xn+1++an+1xn+1n
若方程组的解唯一,则对应的插值多项式具有唯一性。多项式拟合一般具有原理简单、计算复杂、难以得到简单的多项式等特点。

三次样条插值

函数定义在区间 [ a , b ] [a,b] [a,b]上,给定n+1个节点和一组与之对应的函数值,且函数满足:1,每个节点上满足 S ( x i ) = f ( x i ) ( i = 0 , 1 , … , n − 1 ) S(x_i)=f(x_i) (i=0,1,\dots,n-1) S(xi)=f(xi)(i=0,1,,n1);2,在 [ a , b ] [a,b] [a,b]上有连续的二阶导数;3.在每个小区间 [ x i , x i + 1 ] ( i = 0 , 1 , … , n − 1 ) [x_i,x_{i+1}] (i=0,1,\dots,n-1) [xi,xi+1](i=0,1,,n1)上是一个三次多项式,则称 S ( x i ) S(x_i) S(xi)为三次样条插值函数。

三次样条插值函数 S ( x ) S(x) S(x)是一个分段三次多项式,要求出 S ( x ) S(x) S(x),在每个小区间 [ x i , x i + 1 ] [x_i,x_{i+1}] [xi,xi+1]上要确定4个待定参数,若用 S i ( x ) S_i(x) Si(x)表示它在第i个子区间 [ x i , x i + 1 ] [x_i,x_{i+1}] [xi,xi+1]上的表达式,则:
S i ( x ) = a i 0 + a i 1 x + a i 2 x 2 + a i 3 x 3 ( i = 0 , 1 , ⋯   , n − 1 ) S_{i}(x)=a_{i 0}+a_{i 1} x+a_{i 2} x^{2}+a_{i 3} x^{3} \quad(i=0,1, \cdots, n-1) Si(x)=ai0+ai1x+ai2x2+ai3x3(i=0,1,,n1)

举个例子

已知函数y=f(x)的一组数据如表表格:

x012345678910
y12.3413.0213.9813.5212.8111.089.969.5110.2311.1412.25

对这些数据进行多项式插值和三次样条插值,并求:x= 3.5, 4.1, 6.2, 4.5时,y相应的多项式插值和三次样条插值函数值。
绘制函数y=f(x)在区间[0, 10]上的多项式插值函数图形,并将已知点用“ ∘ \circ ”标出。
绘制函数y=f(x)在区间[0, 10]上的三次样条插值函数图形,并将已知点用“ × \times ×”标出。

分析

本题要求依据所给数据计算多项式插值和三次样条插值,并求出特定自变量下插值的函数值,以及绘制函数图像。使用matlab的多项式插值函数 p o l y f i t ( x , y , n ) polyfit(x,y,n) polyfit(x,y,n)和三次样条插值函数 s p l i n e ( x , y , x q ) spline(x,y,xq) spline(x,y,xq)进行计算。其中 p o l y f i t ( x , y ) polyfit(x,y) polyfit(x,y) x x x y y y为原始数据点, n n n为拟合阶数,返回值为多项式的系数; s p l i n e ( x , y ) spline(x,y) spline(x,y) x x x y y y为原始数据点。

求指定的y值

多项式插值

将给定的x和y数据导入matlab,并计算多项式系数。一共11个点,故选取10次多项式进行插值,使用polyfit命令。求得的插值系数用poly2str指令组装成插值多项式,多项式的函数表达式为: y = 2.7111 e − 05 x 10 − 0.0013742 x 9 + 0.029925 x 8 − 0.36589 x 7 + 2.7538 x 6 − 13.1433 x 5 + 39.4708 x 4 − 71.2356 x 3 + 68.9205 x 2 − 25.7489 x + 12.34 y=2.7111e-05 x^{10} - 0.0013742 x^9 + 0.029925 x^8 - 0.36589 x^7 + 2.7538 x^6- 13.1433 x^5 + 39.4708x^4 - 71.2356 x^3 + 68.9205 x^2 - 25.7489 x+ 12.34 y=2.7111e05x100.0013742x9+0.029925x80.36589x7+2.7538x613.1433x5+39.4708x471.2356x3+68.9205x225.7489x+12.34.将x=(3.5,4.1,6.2,4.5)带入,解得y的值为:13.3404,12.6595,9.8347,11.9664.将结果制表、绘图,如下表、下图:

x3.54.16.24.5
y13.340412.65959.834711.9664

在这里插入图片描述

样条插值

样条插值所用命令为spline,官方介绍spline函数的输入输出为yy = spline(x,y,xx);其中x和y为已知点,xx为待求点x轴坐标,yy即为输出对应待求点的y轴坐标。

故运行命令y3=spline(x,y,x1);即可得到待求点的样条插值。y3的值为: 13.2476, 12.6730, 9.8032, 11.9877.将结果制表、绘图,如下表、下图:

x3.54.16.24.5
y13.247612.67309.803211.9877

在这里插入图片描述

插值求函数图形

多项式插值

将x在0-10上间隔采样,得到的值带入上述求值函数中,可以得到对应的y值,再将(x,y)坐标用绘图命令绘制,即得插值函数图形。函数t=f(x)在区间[0,10]上的多项式插值函数图形如图所示:
在这里插入图片描述

样条插值

x在0-10上间隔采样,得到的值带入yy=spline(x,y,xx)的xx里面,返回值为与xx拥有相同维度的yy,yy为样条插值的输出结果。绘图,函数t=f(x)在区间[0,10]上的样条插值函数图形如图所示:
在这里插入图片描述

总结

  • 多项式插值先设插值多项式函数,再将各节点的函数值代入多项式里,便得到个等式,得到一个关于多项式里系数的线性方程组,解此线性方程组,便得到所要求的插值多项式。
  • 样条插值是对每一个小区间进行插值,使得端点处满足某种条件的光滑(本文所用的三次样条插值则要满足二阶导数连续),根据这个要求,在未知导数的情况下推导出样条函数。
  • 本次作业练习了多种插值的求解方法,一定的数据求解让我对插值的含义和运用场景有了更多的认识。在插值求解函数图像时,似乎多项式插值比样条插值更光滑,但是多项式插值的求解涉及大型矩阵求逆,且过分强调每一个数据,在预测未知量时泛化能力可能有所欠缺。

程序

matlab的.m程序下载链接: 用matlab对一组数据求解多项式插值和三次样条插值.

  • 5
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Evand J

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值