1. 首页 > 知识问答

指数平滑法的计算公式(基于MATLAB的三次指数平滑法详解)

指数平滑的定义及公式

产生背景:指数平滑由布朗提出、他认为时间序列的态势具有稳定性或规则性,所以时间序列可被合理地顺势推延;他认为最近的过去态势,在某种程度上会持续的未来,所以将较大的权数放在最近的资料。

基本原理:指数平滑法是移动平均法中的一种,其特点在于给过去的观测值不一样的权重,即较近期观测值的权数比较远期观测值的权数要大。根据平滑次数不同,指数平滑法分为一次指数平滑法、二次指数平滑法和三次指数平滑法等。但它们的基本思想都是:预测值是以前观测值的加权和,且对不同的数据给予不同的权数,新数据给予较大的权数,旧数据给予较小的权数。

方法应用:指数平滑法是生产预测中常用的一种方法。也用于中短期经济发展趋势预测,所有预测方法中,指数平滑是用得最多的一种。

指数平滑法的基本公式:St=a*yt+(1-a)*St-1 式中,

  St--时间t的平滑值;

  yt--时间t的实际值;

  St-1--时间t-1的平滑值;

  a--平滑常数,其取值范围为[0,1]

据平滑次数不同,指数平滑法分为:一次指数平滑法、二次指数平滑和三次指数平滑法等。

若时间序列的变动呈现出二次曲线趋势,则需要采用三次指数平滑法进行预测。此外,一般针对波动较大的指标数据单独做预测时,如果采用多项式拟合,很容易过拟合或欠拟合,就算得到了拟合较好的公式也很难准确的计算出下一个数据,在处理此类问题时,可考虑移动平滑法类的时间序列算法。

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

 


 


 

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


GUI界面如下:

加载数据——输入模型参数alpha、beta和gamma、预测数据个数、x轴坐标名称、y轴坐标名称——点击开始计算即可出现结果,同时会在当前文件夹下生成预测数据的excel文件和图片预测.jpg。需要完整GUI程序,可以进行赞赏后截图(10元及以上),进行联系,或者在微信公众号“云龙派”内回复截图,几小时内会回复。界面编程不易,还请见谅!

 

加载数据

 


 

输入参数

 

开始计算

 


 

GUI界面主要程序如下

function pushbutton6_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton6 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global data
alpha = str2num(get(handles.edit12,'string'));
beta = str2num(get(handles.edit13,'string'));
gamma= str2num(get(handles.edit14,'string'));
fc = str2num(get(handles.edit15,'string'));
str1 = get(handles.edit16,'string');
str2 = get(handles.edit17,'string');
S = data;


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
figure;
plot(S,'b-*','linewidth',1);
hold on
plot(n:n+fc,S(end-fc:end),'r-o','linewidth',1);
grid on;
xlabel(str1);
ylabel(str2);
legend('历史走势','未来走势')
saveas(gcf,'预测.jpg');%保存生成的图片
close(gcf);
axes(handles.axes4);
plot(S,'b-*','linewidth',1);
hold on
plot(n:n+fc,S(end-fc:end),'r-o','linewidth',1);
grid on;
xlabel(str1);
ylabel(str2);
legend('历史走势','未来走势')
xlswrite('预测的数据.xlsx',S);
set(handles.uitable2,'data',S);

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站不拥有所有权,不承担相关法律责任。如发现有侵权/违规的内容, 联系QQ15101117,本站将立刻清除。

联系我们

在线咨询:点击这里给我发消息

微信号:666666