数学建模-三次指数平滑法(预测模型)

时间:2024-11-13 08:13:57

        三次指数平滑预测法是在二次指数平滑值的基础上进行第三次指数平滑。同样,三次指数平滑值并不直接用来预测,而是为求解平滑系数、建立预测模型作准备。   

        三次指数平滑法几乎适用于分析一切时间序列的应用问题。二次指数平滑预测模型是三次指数平滑预测模型的特殊情况,即当数据间呈现线性趋势、曲线曲率为零时的情况。三次以上的高阶平滑法,一般很少使用。

        三次指数平滑法是时间序列算法之一,该算法较为常见,主要基于初始均值,按照三个特定公式计算出相关特征结果,依次向后递推出下一个数据,具体模型如下:

图片

图片

图片

        上述公式中有三个有三个参数,alphabeta影响预测数据的走势是向上还是向下,gamma影响预测数据的波动程度,一般波动较大的数据,三个参数可分别设为0.5 0.5 0.3,波动较小则可设为0.7 0.5 0.3。这两种参数设置适用于大多数指标预测问题。

(*部分参考NHASMJ公众号*)

 代码实现

clear
clc
S=[1140 %矩阵
416
619
837
799
555
441
459
443
140
84
342
712
176
321
508
390
362
370
399
856
199
212
375
816
466
423];
figure
hold on
plot(S,'b-*','linewidth',1);
alpha=0.5;
beta=0.5;
gamma=0.3;
fc=3;%预测个数
k=3;%初始取均值数据个数
n=length(S);
a(1)=sum(S(1:k))/k;
b(1)=(sum(S(k+1:2*k))-sum(S(1:k)))/k;
s=S(1)-a(1);
y=a(1)+b(1)+s(1);
for i=1:n+fc-1
    if i==length(S)
        S(i+1)=a(end)+b(end)+s(end-k+1);
    end
    a(i+1)=alpha*(S(i)-s(i))+(1-alpha)*(a(i)+b(i));
    b(i+1)=beta*(a(i+1)-a(i))+(1-beta)*b(i);%趋势
    s(i+1)=gamma*(S(i)-a(i)-b(i))+(1-gamma)*s(i);%周期
    y(i+1)=a(i+1)+b(i+1)+s(i+1);
end
plot(n:n+fc,S(end-fc:end),'r-o','linewidth',1);
legend('历史走势','未来走势')
xlim([0,37])