滑动窗口的预测方法
采取滑动平均的方法 可以得到数据结果

syms x
format long
for tt=1:6
subplot(6,1,tt)
%基本参数设置
dc=rand(15,1);
shijian=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];%时间,横坐标
geshu=15;%数据个数
t=6;%滑动长度
k=10;%趋势方程个数
%(第一步):直线滑动平均法
%划分十个区间段,每个区间六个数据c,六个时间d
for i=1:k
for j=1:t
c(i,j)=dc(i+j-1);
d(i,j)=shijian(i+j-1);
end
end
%拟合法计算十个趋势方程参数a、b,结果为行向量
x1=sum(d,2)/t;%每个时间区段时间平均数
y1=sum(c,2)/t;%对应历史数据平均数
for i=1:k
for j=1:t
c1(i,j)=c(i,j)*d(i,j);
d1(i,j)=d(i,j)*d(i,j);
end
x11(i)=t*x1(i)*y1(i);
x12(i)=t*x1(i)*x1(i);
end
c11=sum(c1,2);
d11=sum(d1,2);
for i=1:k
a(i)=(c11(i)-x11(i))/(d11(i)-x12(i));
b(i)=y1(i)-a(i)*x1(i);
end
%计算十个趋势方程在各自时间区间段的数据,共60个
for i=1:k
for j=1:t
m(i,j)=a(i)*d(i,j)+b(i);
end
end
%对60个数据进行平均处理,得出10位历史数据的去趋势后数据
m1=rot90(m);
r0=[];
for i=1:sum(size(m1))-1
k1=i-size(m1,1);
Diag=diag(m1,k1);
r0=[r0;mean(Diag)];
end
r0;
plot(shijian,dc,'r',shijian,r0,'b');%红色为原历史数据,蓝色为去趋势后的数据
title('红色为原历史数据,蓝色为去趋势后的数据');
xlabel('时间序列');
ylabel('单位产量');
end
1万+

被折叠的 条评论
为什么被折叠?



