【MATLAB第75期】#源码分享 | 基于MATLAB的不规则数据插值实现时间序列数据扩充

【MATLAB第75期】#源码分享 | 基于MATLAB的不规则数据插值实现时间序列数据扩充

如时间数据以单位1为间隔排序, 可插间隔为0.5的数据 。

一、实现效果

1.规则间隔数据

在这里插入图片描述
在这里插入图片描述

2.非规则间隔数据

在这里插入图片描述
在这里插入图片描述

二、主程序代码

1.插值测试效果

%%  清空环境变量
warning off             % 关闭报警信息
close all               % 关闭开启的图窗
clear                   % 清空变量
clc                     % 清空命令行

%%  导入数据(时间序列的单列数据)
y= xlsread('数据集.xlsx');
N=size(y,1);
x=1:1:N;   % x也可以为不规则间隔插值  , 如x=sort(rand(N,1))
d=0.5;%间隔设置  ,根据x变量的间隔设置
p=0.01;%插值密度大于0,p值越小精度越高。

%% 测试插值效果
xt1=(x)';%测试样本 插值扩充后的x轴
xt2=xt1+p;%测试样本  插值偏移位置为 xt1和xt2坐标的中点
yti=cuts(x,y,xt2,xt1);%测试样本 插值结果
error = sqrt(sum((yti -y ).^2) ./ N);
  %绘图 
  figure()
  plot(x,y,'b-x',reshape([xt1 xt2]',[],1),reshape([yti yti]',[],1),'ro',mean([xt1 xt2],2),yti,'ro', 'LineWidth', 2)
  legend('实际值','插值')
xlabel('x')
ylabel('y')
string = {
    
    '测试集插值误差';['RMSE=' num2str(error)]};
title(string)
grid

2.正式插值

%% 正式插值
x1=(0.5:1:N-0.5)';%测试样本 插值扩充后的x轴
x2=x1+p;%测试样本  插值偏移位置为 xt1和xt2坐标的中点
yi=cuts(x,y,x2,x1);%测试样本 插值结果
  %绘图 
  figure()
  plot(x,y,'b-x',reshape([x1 x2]',[],1),reshape([yi yi]',[],1),'ro',mean([x1 x2],2),yi,'ro', 'LineWidth', 2)
  legend('实际值','插值')
xlabel('x')
ylabel('y')
string2 = {
    
    '插值效果'};
title(string2)
grid

3.非规则数据插值

自定义x区间范围,比如同样是100个样本,x轴编号通过随机在1:500中抽取100个数字作为x轴,y不变。也可以包含小数 ,或者自己随机定义。

xx = randperm(500); %
x=sort(xx(1:N));   % x也可以为不规则间隔插值

正式插值时x1改为:

x1=(1:10:500)';%测试样本 插值扩充后的x轴

三、代码获取

CSDN后台私信回复“75期”即可。

猜你喜欢

转载自blog.csdn.net/qq_29736627/article/details/132898772
今日推荐