插值指的是运用一些数学的方法,“模拟产生”一些新的但又比较可靠的数据,补足题目中的空缺数据;
插值也可以用来做预测问题,而且比灰色预测可靠得多,数学背景也更丰富;
一、三次埃尔米特(Hermite)插值
埃尔米特(Hermite)插值不但要求在节点上的函数值相等,而且还要求对应的导数值也相等,甚至高阶导数也相等;但一般不直接用Hermite插值,因为多项式次数较高,存在龙格现象;比赛中多使用分段三次Hermite插值(PCHIP),Matlab参考代码及结果如下:
x = -pi:pi; y = sin(x);
new_x = -pi:0.1:pi;
p = pchip(x,y,new_x);
plot(x, y, \'o\', new_x, p, \'r-\')
二、三次样条插值
数学分析略,到时候真要用就去书上找吧,样条插值的特点在于插值函数在区间上二阶连续可微,所以画出的曲线会更加光滑,与三次Hermite插值算法的比较如下:
% 三次样条插值和分段三次埃尔米特插值的对比
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);
plot(x,y,\'o\',new_x,p1,\'r-\',new_x,p2,\'b-\')
legend(\'样本点\',\'三次埃尔米特插值\',\'三次样条插值\',\'Location\',\'SouthEast\') %标注显示在东南方向
% 说明:
% LEGEND(string1,string2,string3, …)
% 分别将字符串1、字符串2、字符串3……标注到图中,每个字符串对应的图标为画图时的图标。
% ‘Location’用来指定标注显示的位置
三、插值算法在短期预测上的运用
虽然这么说,但是其实预测算法比如拟合预测更适合这类问题...
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\')
美赛打完了233,估计还是只能拿个S奖,大学里的数模生涯正式结束了,就挺尴尬的,以后应该也不会更新数模的博客了,再见啦
本文算法思想参考源于清风建模,特此注明