matlab实现指数平滑(一次/二次/三次)
生活随笔
收集整理的這篇文章主要介紹了
matlab实现指数平滑(一次/二次/三次)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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
y1next=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'
總結
以上是生活随笔為你收集整理的matlab实现指数平滑(一次/二次/三次)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab实现移动平均
- 下一篇: xlrd.biffh.XLRDError