数模比赛中,常常需要根据已知的函数点进行数据、模型的处理和分析,而有时候现有的数据是极少的,不足以支撑分析的进行,这时就需要使用一些数学的方法,模拟产生一些新的但又比较靠谱的值来满足需求,这就是插值的作用。另外也可以通过插值起到预测的作用。
拉格朗日插值法 和 牛顿插值法 都存在 龙格现象,即在两端处波动极大,产生明显的震荡,使得函数的误差会很大。其次,两种插值仅仅要求插值多项式在插值节点处与被插函数有相等的函数值,而这种插值多项式却 不能全面反映被插值函数的性态。
直接使用埃尔米特插值得到的多项式次数较高,也存在着龙格现象。因此在实际应用中,往往使用分段 三次埃尔米特插值多项式(PCHIP)。
分段三次埃尔米特
Matlab有内置的函数: p = pchip(x,y, new_x)
三次样条插值
三次样条插值比三次埃米特插值更加光滑。
Matlab有内置的函数:p = spline(x,y, new_x)
plot函数用法:
plot(x1,y1,x2,y2)
分段三次埃尔米特插值
% 分段三次埃尔米特插值
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-')
三次样条插值
% 分段三次埃尔米特插值
x = -pi:pi; y = sin(x);
new_x = -pi:0.1:pi;
p = spline (x,y,new_x);
plot(x, y, 'o', new_x, p, 'r-')
三次样条插值和分段三次埃尔米特插值的对比
% 三次样条插值和分段三次埃尔米特插值的对比
x = -pi:pi;
y = sin(x);
new_x = -pi:0.1:pi;
p1 = pchip(x,y,new_x); %分段三次埃尔米特插值
p2 = spline(x,y,new_x); %三次样条插值
plot(x,y,'o',new_x,p1,'r-',new_x,p2,'b-')
legend('样本点','三次埃尔米特插值','三次样条插值','Location','SouthEast')
本文借鉴了数学建模清风老师的课件与思路,如果大家发现文章中有不正确的地方,欢迎大家在评论区留言,也可以点击查看下方链接查看清风老师的视频讲解~
原文链接:https://www.bilibili.com/video/BV1DW411s7wi