从零开始的数学建模:(五)插值算法
插值指的是运用一些数学的方法,“模拟产生”一些新的但又比较可靠的数据,补足题目中的空缺数据;
插值也可以用来做预测问题,而且比灰色预测可靠得多,数学背景也更丰富;
一、三次埃尔米特(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奖,大学里的数模生涯正式结束了,就挺尴尬的,以后应该也不会更新数模的博客了,再见啦
本文算法思想参考源于清风建模,特此注明

浙公网安备 33010602011771号