【Matlab】实现指数平滑(一次/二次/三次)

1,253 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

Matlab实现指数平滑(一次/二次/三次)

引言

指数平滑法是生产预测中常用的一种方法。也用于中短期经济发展趋势预测,所有预测方法中,指数平滑是用得最多的一种。简单的全期平均法是对时间数列的过去数据一个不漏地全部加以同等利用;移动平均法则不考虑较远期的数据,并在加权移动平均法中给予近期资料更大的权重;而指数平滑法则兼容了全期平均和移动平均所长,不舍弃过去的数据,但是仅给予逐渐减弱的影响程度,即随着数据的远离,赋予逐渐收敛为零的权数。指数平滑法是在移动平均法基础上发展起来的一种时间序列分析预测法,它是通过计算指数平滑值,配合一定的时间序列预测模型对现象的未来进行预测。其原理是任一期的指数平滑值都是本期实际观察值与前一期指数平滑值的加权平均

数据

我们以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,:)

二次指数平滑

clc,clear
load y.mat;
data=y;
lenD=length(data);
a=0.3;
st1(1)=data(1);
st2(2)=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'


三次指数平滑

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];
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'