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