## 源码分享| 基于MATLAB的五种插值方法合集(线性、三次、三次样条、最邻近、分段三次Hermite),解决多变量样本空值插值,以及零值插值
**免费提供试用版代码,可自行运行计算结果。**
## 1.数据要求
(1)数据均为数值格式。
(2)每行为不同变量的值。
(2)首尾数据得有值,不能空缺。
## 2.插值方法
(1)线性插值
(2)三次插值
(3)三次样条插值
(4)最邻近插值
(5)分段三次Hermite插值
## 3.插值思路
(1)提取非零或者非空对应的数据进行插值
(2)找到对应非零或者非空的行以及列
(3)使用五种方法,用for循环分别对提取后的残缺合集进行插值
(4)对插值结果赋值为datanew1~5
(5)将插值的结果替换原来的非零或者非空数据
(6)判断插值结果是否为负
## 4.插值数据
(1)空值插值
(2)零值插值
## 5.插值结果
插值结果不一一举例,选取线性插值结果进行展示。
(1)空值插值
(2)零值插值
## 6.主程序代码展示(部分)
(1)空值插值
clc,clear;
data=xlsread('randNaNExample.xlsx','Sheet1'); %提取数据分析1数据
data1=data(:,1:end);%
[M,p1,p2,p3,p4,p5] = mynan(data);
finaldata1=data1;% 线性插值结果
finaldata2=data1;% 三次插值结果
finaldata3=data1;% 三次样条插值法结果
finaldata4=data1;% 最邻近插值法结果
finaldata5=data1;% 分段三次Hermite插值预测结果
%判断p有没有负数
for i=1:size(M,1)
cc1{i,1}=find(p1{i,1}<0); %cc 变量里 如果有值,说明存在负数
end
for i=1:size(M,1)
cc2{i,1}=find(p2{i,1}<0); %cc 变量里 如果有值,说明存在负数
end
for i=1:size(M,1)
cc3{i,1}=find(p3{i,1}<0); %cc 变量里 如果有值,说明存在负数
end
for i=1:size(M,1)
cc4{i,1}=find(p4{i,1}<0); %cc 变量里 如果有值,说明存在负数
end
for i=1:size(M,1)
cc5{i,1}=find(p5{i,1}<0); %cc 变量里 如果有值,说明存在负数
end
datanew1=cell2mat(p1);% 还原p矩阵 线性插值
datanew2=cell2mat(p2);% 还原p矩阵 三次插值
datanew3=cell2mat(p3);% 还原p矩阵 三次样条插值法
datanew4=cell2mat(p4);% 还原p矩阵 最邻近插值法
datanew5=cell2mat(p5);% 还原p矩阵 分段三次Hermite插值预测
finaldata1(M,:)=datanew1;% data原来的数据 有空值的样本都替换成新插值的样本
finaldata2(M,:)=datanew2;% data原来的数据 有空值的样本都替换成新插值的样本
finaldata3(M,:)=datanew3;% data原来的数据 有空值的样本都替换成新插值的样本
finaldata4(M,:)=datanew4;% data原来的数据 有空值的样本都替换成新插值的样本
finaldata5(M,:)=datanew5;% data原来的数据 有空值的样本都替换成新插值的样本
(2)零值插值
clc,clear;
data=xlsread('rand0Example.xlsx','Sheet1'); %提取数据分析1数据
data1=data(:,1:end);%
[M,p1,p2,p3,p4,p5] = myzero(data);
finaldata1=data1;% 线性插值结果
finaldata2=data1;% 三次插值结果
finaldata3=data1;% 三次样条插值法结果
finaldata4=data1;% 最邻近插值法结果
finaldata5=data1;% 分段三次Hermite插值预测结果
%判断p有没有负数
for i=1:size(M,1)
cc1{i,1}=find(p1{i,1}<0); %cc 变量里 如果有值,说明存在负数
end
for i=1:size(M,1)
cc2{i,1}=find(p2{i,1}<0); %cc 变量里 如果有值,说明存在负数
end
for i=1:size(M,1)
cc3{i,1}=find(p3{i,1}<0); %cc 变量里 如果有值,说明存在负数
end
for i=1:size(M,1)
cc4{i,1}=find(p4{i,1}<0); %cc 变量里 如果有值,说明存在负数
end
for i=1:size(M,1)
cc5{i,1}=find(p5{i,1}<0); %cc 变量里 如果有值,说明存在负数
end
datanew1=cell2mat(p1);% 还原p矩阵 线性插值
datanew2=cell2mat(p2);% 还原p矩阵 三次插值
datanew3=cell2mat(p3);% 还原p矩阵 三次样条插值法
datanew4=cell2mat(p4);% 还原p矩阵 最邻近插值法
datanew5=cell2mat(p5);% 还原p矩阵 分段三次Hermite插值预测
finaldata1(M,:)=datanew1;% data原来的数据 有空值的样本都替换成新插值的样本
finaldata2(M,:)=datanew2;% data原来的数据 有空值的样本都替换成新插值的样本
finaldata3(M,:)=datanew3;% data原来的数据 有空值的样本都替换成新插值的样本
finaldata4(M,:)=datanew4;% data原来的数据 有空值的样本都替换成新插值的样本
finaldata5(M,:)=datanew5;% data原来的数据 有空值的样本都替换成新插值的样本
## 7.代码获取
试用版代码以及案例数据将基本免费提供。
【试用版下载链接】https://mbd.pub/o/bread/mbd-ZJeXlZlu
【完整版下载链接】https://mbd.pub/o/bread/mbd-ZJeXlZlw