【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轴

三、代码获取

1.阅读首页置顶文章
2.关注CSDN
3.根据自动回复消息,回复“75期”以及相应指令,即可获取对应下载方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随风飘摇的土木狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值