欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数模算法:插值算法

程序员文章站 2022-05-22 14:13:03
...

引入:

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

常用方法:

分段三次埃尔米特插值
数模算法:插值算法
直接使用Hermite插值得到的多项式次数较高,也存在着龙格现象(次数越高两端出现震荡现象), 因此在实际应用中,往往使用分段三次Hermite插值多项式(PCHIP)。

Matlab有内置的函数,配合plot函数画图

p = pchip(x,y,new_x)

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

x=-pi:pi;
y=cos(x);
new_x=-pi:0.1:pi;%要插值的点
p=pchip(x,y,new_x);
figure(1)%为图片编号
plot(x,y,'o',new_x,p,'b-')

结果
数模算法:插值算法

三次样条插值
数模算法:插值算法
Matlab有内置的函数:
p = spline(x,y,new_x); 等价于 p = interpn(x, y, new_x, ’spline’);

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

x=-pi:pi;
y=cos(x);
new_x=-pi:0.1:pi;%要插值的点
p1=pchip(x,y,new_x);%分段三次埃尔米特插值
p2=spline(x,y,new_x);%三次样条插值
figure(1)%为图片编号
plot(x,y,'o',new_x,p1,'b-',new_x,p2,'r-')
%标注显示在东南方向
legend('样本点','分段三次埃尔米特插值','三次样条插值','Location','SouthEast')

结果对比
数模算法:插值算法

插值算法也可用于预测

实例:预测接下来三年的人口数据
数模算法:插值算法
matlab代码

%数据存在X,Y变量中
P=X;
year=Y;
p1=pchip(year,P,2019:2021);
p2=spline(year,P,2019:2021);
figure(1);
plot(year,P,'o',2019:2021,p1,'b*-',2019:2021,p2,'r*-')
legend('样本点','分段三次埃尔米特插值','三次样条插值','Location','SouthEast')

结果
数模算法:插值算法
数模算法:插值算法

建模应用实例:

MathorCup第六届A题淡水养殖池塘水华发生及池水净化处理,插值预测中间周的水体评价指标
对1号池给出数据的指标插值得到其他数据
数模算法:插值算法
matlab代码

%导入数据
load Data.mat
[n,m]=size(Data);
%星期数
W=Data(1,:);
disp(['共需要对' num2str(n-1) '个指标插值']);
%要插值的指标
targetname={'周数','轮虫','溶氧','COD','水温','PH值','盐度','透明度','总碱度','氯离子','透明度','生物量'};
P=zeros(11,15);
for i=2:n
    y=Data(i,:);%取出原有的每行数据
    new_x=1:15;%要插值的x
    p1=pchip(W,y,new_x);%三次埃尔米特插值
    p2=spline(W,y,new_x);%三次样条插值
    
    figure(1);
    subplot(4,3,i-1);%将所有图放在4*3大图上
    plot(W,y,'o',new_x,p1,'r*-');
    axis([0 15,-inf,inf])%设置横坐标轴范围,星期数,纵坐标不变
    ylabel(targetname{i});%y坐标标题
    figure(2);
    subplot(4,3,i-1);%将所有图放在4*3大图上
    plot(W,y,'o',new_x,p2,'b*-');
    axis([0 15,-inf,inf])%设置横坐标轴范围,星期数,纵坐标不变
    ylabel(targetname{i});%y坐标标题
   
    P(i-1,:)=p1;%结果保存
end
legend('原始数据','插值后数据','Location','SouthEast')
P=[1:15;P]%星期数加回第一行
    
    
    

三次埃尔米特插值结果
数模算法:插值算法
三次样条插值结果
数模算法:插值算法
最终数据
数模算法:插值算法

相关标签: 数学建模