## 源码分享| 基于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
武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks ,Hyperworks, Protel,CAXA,OpenWorks LandMark,MATLAB,Enovia,Winchill,TeamCenter,MathCAD,Ansys, Abaqus,ls-dyna, Fluent, MSC,Bentley,License,UG,ug,catia,Dassault Systèmes,AutoDesk,Altair,autocad,PTC,SolidWorks,Ansys,Siemens PLM Software,Paradigm,Mathworks,Borland,AVEVA,ESRI,hP,Solibri,Progman,Leica,Cadence,IBM,SIMULIA,Citrix,Sybase,Schlumberger,MSC Products...