三次指数平滑法(Matlab实现)

之前的代码写的有点简略,让很多朋友感到很头疼^_^,

这里我再次修改整理了下,需要更改的地方我都用注释标注出来了,

大家根据具体问题自行修改就可以直接使用了!

clc,clear 

%时间序列,根据具体问题修改
yt=[31.26,32.09,33.39,35.45,40.52,43.52,47.86,51.45,...
    55.60,60.14,64.82,68.65,73.22,80.22,87.69,93.97,...
    99.16,103.38,109.46,114.60,119.85,124.92,132.04,...
   139.45,150.93,165.13,181.93,196.83,212.38,228.07,...
   241.45,251.03,267.90,287.62,310.47,332.21,354.99,...
   384.52,434.72,454.70];
alpha=0.3;   % alpha大小,可以根据数据特点自行设定
n=length(yt);
st1_0=mean(yt(1:3)); st2_0=st1_0;st3_0=st1_0; 
st1=alpha*yt(1)+(1-alpha)*st1_0; 
st2=alpha*st1(1)+(1-alpha)*st2_0; 
st3=alpha*st2(1)+(1-alpha)*st3_0; 
for i=2:n+15    %预测年份,比如我这里需要预测15年,那么我就加15
    if i>n
        yt=[yt,a+b+c];
    end
    st1=alpha*yt(i)+(1-alpha)*st1;    
    st2=alpha*st1+(1-alpha)*st2; 
    st3=alpha*st2+(1-alpha)*st3;
    a=3*st1-3*st2+st3; 
    b=0.5*alpha/(1-alpha)^2*((6-5*alpha)*st1-2*(5-4*alpha)*st2+(4-3*alpha)*st3);
    c=0.5*alpha^2/(1-alpha)^2*(st1-2*st2+st3);
end
plot(1:n+15,yt)     %n+预测的年份
  • 19
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值