【2024_CUMCM】插值算法(附代码)

目录

一维插值问题

插值法定义和分类

定义

分类 

一般插值多项式原理

范德蒙德行列式

一些插值法

拉格朗日插值法

 龙格现象(Runge phenomenon)

分段线性插值

分段二次插值

牛顿插值法

比较拉格朗日插值法与牛顿插值法 

埃尔米特(Hermite)插值法

分段三次埃尔米特插值

补充:plot

三次样条插值

插值算法可用于短期预测


 

引言:在数模比赛中,常常会出现数据的分析时的数据不足或缺失,这时我们想要补数据,并且需要补上一些较为靠谱的数据,此时就需要用到插值法

一维插值问题

当我们有一些离散的点,想要插入任意插值点x*,此时我们可以通过构造函数,使得f(x)过所有节点,那由x*就可以求出y*。 

插值法定义和分类

定义

这个一般定义想表达的就是我们刚刚说的一维插值问题

分类 

插值多项式、分段插值都比较好理解

三角插值一般用到傅里叶变换,我想是傅里叶级数

一般插值多项式原理

证明多项式唯一,即要说明系数唯一。先构造方程组,然后写出系数矩阵, 通过计算矩阵的行列式是否为0,判断是否有唯一解。

不难发现这是一个范德蒙德行列式,通过公式计算其行列式不等于0,方程组有唯一解。

范德蒙德行列式

范德蒙德行列式具有以下公式,可通过数学归纳法证明

        证明:矩阵--范德蒙德行列式-CSDN博客 

一些插值法

拉格朗日插值法

拉格朗日插值法可以找到一个拉格朗日多项式,其恰好在个观测的点取到y值

 

不难发现,代入之后,都只剩下了对应的y项

 龙格现象(Runge phenomenon)

由图,拉格朗日插值会出现 ,n大时,尾部跳的很厉害。这就是龙格现象

也就是说,插值多项式的次数越高误差反而越大

分段线性插值

针对前面的龙格现象,提出了分段插值 

分段二次插值

牛顿插值法

差商:f[ x0 , xk ] =  f( xk ) - f( x0 ) / xk - x0

比较拉格朗日插值法与牛顿插值法 

对于拉格朗日插值,当增加或减少一个插值点的计算,将需要重新计算相应的插值基函数,然后插值多项式的公式代入结果也会改变,大大增加了计算量,解题十分繁琐。

牛顿插值法的公式是另一种n次插值多项式的构造形式,然而它却克服了拉格朗日插值多项式的缺陷,它的一个显著优势就是每当增加一个插值节点,只要在原牛顿插值公式中增加一项就可形成高一次的插值公式。 

但是,这两种插值方法还是避免不了龙格现象

埃尔米特(Hermite)插值法

 

要求很高,函数相等,导数相等


分段三次埃尔米特插值

% 分段三次埃尔米特插值
x = -pi:pi; y = sin(x); 
new_x = -pi:0.1:pi; % 以0.1为精度进行插值
p = pchip(x,y,new_x); % 内置函数
figure(1); % 在同一个脚本文件里面,要想画多个图,需要给每个图编号,否则只会显示最后一个图哦~
plot(x, y, 'o', new_x, p, 'r-')

补充:plot

plot是用来画图的

最简单的:plot(a,b) 表示画出以a为x轴,b为y轴的图像 ,如图1

 

plot(x, y, 'o', new_x, p, 'r-')   表示画出x与y的o图 和 new_x与p的红(r)线图,如上图2

蓝o是原值,红线是插入值后连成的线

如果需要图例,加上legend('x-y','new_x-p','Location','SouthEast'),如下图


三次样条插值

为方便说明,我们之间将两者进行对比 

x = -pi:pi; 
y = sin(x); 
new_x = -pi:0.1:pi;
p1 = pchip(x,y,new_x);   %分段三次埃尔米特插值
p2 = spline(x,y,new_x);  %三次样条插值
figure(2); % 需要注明figure,不然会覆盖
plot(x,y,'o',new_x,p1,'r-',new_x,p2,'b-')
legend('样本点','三次埃尔米特插值','三次样条插值','Location','SouthEast')  

非常明显可以看出,三次样条插值的图像更加光滑 

插值算法可用于短期预测

短期预测 

例题:根据过去10年的中国人口数据,预测接下来三年的人口数据: 

population=[133126,133770,134413,135069,135738,136427,137122,137866,138639, 139538];
year = 2009:2018;
p1 = pchip(year, population, 2019:2021)  %分段三次埃尔米特插值预测
p2 = spline(year, population, 2019:2021) %三次样条插值预测
figure(4);
plot(year, population,'o',2019:2021,p1,'r*-',2019:2021,p2,'bx-')
legend('样本点','三次埃尔米特插值预测','三次样条插值预测','Location','SouthEast')

 

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值