📄 zhishuyc.m
字号:
clc
clear
%输入每个月96点数据,构成矩阵a
load 2005gxxdata
% 对原始数据进行有效性处理
[i j]=size(a);
for m=1:i
for n=2:j
if ((a(m,n)-a(m,n-1))>0)&(a(m,n)/a(m,n-1)>1.1)
a(m,n)=a(m,n-1)*1.1;
elseif ((a(m,n)-a(m,n-1))<0)&((a(m,n)/a(m,n-1))<0.9)
a(m,n)=a(m,n-1)*0.9;
end
end
end
% 用指数平滑法进行预测
date=input('date=');
if date<=6
'error:please input date>=7'
else
forecast=zeros(24,1);
for dot=1:24
x0=(a(dot,date-6)+a(dot,date-5)+a(dot,date-4))/3;
b1=0.9*a(dot,date-6)+0.1*x0;
b2=0.9*a(dot,date-5)+0.1*b1;
b3=0.9*a(dot,date-4)+0.1*b2;
b4=0.9*a(dot,date-3)+0.1*b3;
b5=0.9*a(dot,date-2)+0.1*b4;
b6=0.9*a(dot,date-1)+0.1*b5;
forecast(dot)=b6;
end
% 对每个点进行预测值与前一时刻值比较,误差超过10%的进行修正
for dot=1:24
if ((forecast(dot)-a(dot,date-1))>0)&(forecast(dot)/a(dot,date-1)>1.1)
fortcast(dot)=a(dot,date-1)*1.1;
elseif ((forecast(dot)-a(dot,date-1))<0)&(abs(forecast(dot)/a(dot,date-1))<0.9)
forecast(dot)=a(dot,date-1)*0.9;
end
end
% 对所进行的预测进行误差分析
forecast
error=(a(:,date)-forecast)./a(:,date);
he=abs(error);
MRE=sum(he)/24;
k=sum(he.^2)/24;
Ed=sqrt(k);
Ad=1-Ed
%预测日96点与当日原96点进行曲线拟合
x=[1:24];y=a(:,date)';z=forecast';
plot(x,y,'-o',x,z,'-v')
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -