【MATLAB第41期】源码分享 | 基于MATLAB的二次及三次指数平滑及其时间序列预测代码
一、资源获取
后台私信回复“41期”,可免费获取代码下载链接。
二、效果展示
1.二次指数平滑法
2.三次指数平滑法
三、代码展示
%% 清空环境变量 warning off % 关闭报警信息 close all % 关闭开启的图窗 clear % 清空变量 clc % 清空命令行 %% 导入数据(时间序列的单列数据) Yt = xlsread('数据集.xlsx'); alpha=0.5; t=10; %% 数据分析 num_samples = length(Yt); % 样本个数 [Y,S1,S2,a,b] = expsmooth2(Yt,alpha,t) function [Y,S1,S2,a,b] = expsmooth2(Yt,alpha,t) %Yt:原时间序列;alpha:平滑系数;t:预测时长 %Y:预测值;S1/S2:一次/二次指数平滑值;a/b:预测公式参数 n=length(Yt); %计算一次指数平滑值 %计算二次指数平滑值 %计算参数a和b for i=1:n a(i)=2*S1(i)-S2(i); b(i)=alpha/(1-alpha)*(S1(i)-S2(i)); end %计算预测值Y for i=1:t Y(i)=a(n)+b(n)*i; end %绘图 plot(1:n,Yt,(n+1):(n+t),Y,'*'); end
%% 清空环境变量 warning off % 关闭报警信息 close all % 关闭开启的图窗 clear % 清空变量 clc % 清空命令行 %% 导入数据(时间序列的单列数据) Yt = xlsread('数据集.xlsx'); alpha=0.5; t=10; %% 数据分析 num_samples = length(Yt); % 样本个数 [Y,S1,S2,S3,a,b,c] = expsmooth3(Yt,alpha,t) function [Y,S1,S2,S3,a,b,c] = expsmooth3(Yt,alpha,t) %Yt:原时间序列;alpha:平滑系数;t:预测时长 %Y:预测值;S1/S2/S3:一次/二次/三次指数平滑值;a/b/c:预测公式参数 n=length(Yt); %计算一次指数平滑值 %计算二次指数平滑值 %计算三次指数平滑值 %计算参数a、b、c for i=1:n a(i)=3*S1(i)-3*S2(i)+S3(i); b(i)=alpha/(1-alpha)^2/2 * ((6-5*alpha)*S1(i) - 2*(5-4*alpha)*S2(i) + (4-3*alpha)*S3(i)); c(i)=alpha/(1-alpha)^2/2 * (S1(i)-2*S2(i)+S3(i)); end %计算预测值Y for i=1:t Y(i)=a(n)+b(n)*i+c(n)*i^2; end %绘图 plot(1:n,Yt,(n+1):(n+t),Y,'*'); end