数学建模中的插值算法

一、介绍
数模比赛中,常常需要根据已知的函数点进行数据、模型的处理和分析,而有时候现有的数据是极少的,不足以支撑分析的进行,这时就需要使用一些数学的方法,“模拟产生”一些新的但又比较靠谱的值来满足需求,这就是插值的作用。

经常使用的插值算法有四种
1、拉格朗日插值
2、牛顿插值
3、分段三次Hermite插值
4、样条插值

二、具体介绍五种插值算法
1、拉格朗日插值和牛顿插值
数学建模中的插值算法_第1张图片
在使用这两种方法的时候,我们发现,在插值次数比较少的时候函数曲线还是和目标函数的图像比较接近,不过在高次插值的时候,即在横坐标为4.5左右的时候,会出现龙格现象。所以在不熟悉运动曲线趋势的时候我们不要轻易使用这两种方法,以免发生错误。

龙格现象:即在两端处波动极大,产生明显的震荡。

下面我们主要介绍以下两种方法

2、分段三次埃米尔特(Hermite)插值

埃尔米特插值多项式就是不但要求在节点上的函数值相等,而且还要求对应的导数值也相等,甚至要求高阶导数也相等,满足这种要求的插值多项式.。
数学建模中的插值算法_第2张图片
直接使用Hermite插值得到的多项式次数较高,也存在着龙格现象,因此在实际应用中,往往使用分段三次Hermite插值多项(PCHIP)。

Matlab有内置的函数(实现过程已经帮我们封装好了,会调用就行了)∶

p = pchip(x,y, new_x)

x是已知的样本点的横坐标;y是已知的样本点的纵坐标;new_x是要插入处对应的横坐标

代码为

% 分段三次埃尔米特插值
x = -pi:pi; y = sin(x); 
new_x = -pi:0.1:pi;
p = pchip(x,y,new_x);
figure(1); 
plot(x, y, 'o', new_x, p, 'r-')

3、三次样条插值

数学建模中的插值算法_第3张图片

Matlab有内置的函数:

p = spline(x,y, new_x)

x是已知的样本点的横坐标;y是已知的样本点的纵坐标;new_x是要插入处对应的横坐标

x = ‐pi:pi;
y = sin(x);
new_x = ‐pi:0.1:pi;
p2 = spline(x,y,new_x); %三次样条插值
plot(x,y,'o',new_x,p1,'r‐',new_x,p2,'b‐')
legend('样本点','三次埃尔米特插值','三次样条插值',‘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);
plot(x,y,'o',new_x,p1,'r-',new_x,p2,'b-')
legend('样本点','三次埃尔米特插值','三次样条插值','Location','SouthEast')   %标注显示在东南方向

数学建模中的插值算法_第4张图片
我们可以发现,三次样条插值的精确度比三次埃米特插值的精确度还要高

参考文章:清风老师

你可能感兴趣的:(数学建模,数学建模)