数据
我们以301X1的矩阵为数据(即代码中的y.mat),(百度云下载点这里提取码2333,积分下载点这里可以的话积分下载支持一下呀),同时也可以视情况导入自己的数据进行指数平滑处理
一次指数平滑
clc,clear
load y.mat;
data=y;
lenD=length(data);
a=[0.01 0.2 0.3 ];
lenA=length(a);
y1(1,1:lenA)=(data(1)+data(2))/2;
for i=2:lenD
y1(i,:)=a*data(i-1)+(1-a).*y1(i-1);
end
y1
next=a*data(lenD)+(1-a).*y1(lenD,:)
%若要预测未来10天则将上文最后两行改为以下这一段即可,预测x天同理
%for i=lenD+1:lenD+10
% y1(i,:)=a*y1(i-1)+(1-a).*y1(i-1);
%end
%y1
%next=a*y1(lenD+10)+(1-a).*y1(lenD+10,:)
使用一个平滑状态(y1)和一个平滑因子数组(a)。首先初始化了状态,然后在数据集上进行迭代,更新状态。最后,计算预测值next。
二次指数平滑
clc,clear
load y.mat;
data=y;
lenD=length(data);
a=0.3;
st1(1)=data(1);
st2(1)=data(1);
for i=2:lenD
st1(i)=a*data(i)+(1-a).*st1(i-1);
st2(i)=a*st1(i)+(1-a).*st2(i-1);
end
b1=2*st1-st2
b2=a/(1-a)*(st1-st2)
y2=b1+b2
y2=y2'
首先加载 y.mat 的数据文件,然后对这些数据进行二次指数平滑。平滑因子 a 为 0.3。st1 和 st2 是平滑过程中的两个状态,它们都被初始化为数据的第一个值。然后,对于数据中的每个值,更新 st1 和 st2。最后,计算并输出预测值 y2。预测未来第n个时间点的数据yn = b1(lenD) + n*b2(lenD)
三次指数平滑
clc,clear
load y.mat;
data=y;
lenD=length(data);
a=0.3;
st1_0=mean(data(1:3));
st2_0=st1_0;
st3_0=st1_0;
st1(1)=a*data(1)+(1-a)*st1_0;
st2(1)=a*st1(1)+(1-a)*st2_0;
st3(1)=a*st2(1)+(1-a)*st3_0;
for i=2:lenD
st1(i)=a*data(i)+(1-a).*st1(i-1);
st2(i)=a*st1(i)+(1-a).*st2(i-1);
st3(i)=a*st2(i)+(1-a).*st3(i-1);
end
st1=[st1_0,st1];
st2=[st2_0,st2];
st3=[st3_0,st3];
%若要预测未来10天则将上面三行代码改成以下注释的几行即可,预测x天同理
%for i=lenD+1:lenD+10
% st1(i)=a*st1(i-1)+(1-a).*st1(i-1);
% st2(i)=a*st1(i)+(1-a).*st2(i-1);
% st3(i)=a*st2(i)+(1-a).*st3(i-1);
%end
b1=3*st1-3*st2+st3
b2=0.5*a/(1-a)^2*((6-5*a)*st1-2*(5-4*a)*st2+(4-3*a)*st3)
b3=0.5*a/(1-a)^2*(st1-2*st2+st3)
y3=b1+b2+b3;
y3=y3'
使用三个平滑状态(st1, st2, st3)和一个平滑因子(a)。首先初始化了三个状态,然后在数据集上进行迭代,更新每个状态。最后计算出预测值y3。