load data20101201h;
s=s1(:,7); % 温度,湿度,气压,风向,风速
s=s+abs(min(s));
s0=s;
s_mean=mean(s0) ; % 均值
s_var=var(s0) ; % 方差
% figure(1);
% plot(s(1:400,1));
% xlabel('时间/1h');ylabel('风速值 / m/s');
%% 2.数据预处理,用于定阶
s=diff(s0,1); % 一阶差分 detrend
adftest(s) % 单位根检验 1平稳
lillietest(s) % 0 则是正态分布
ttest(s,0) % 0 则是均值为0的序列
figure(1)
autocorr(s,25); % 自相关图,判断是否平稳
title('风速时间序列的自相关图')
figure(2)
parcorr(s,25); % 偏相关图
title('风速时间序列的偏自相关图')
x2=iddata([s',0]'); % 转化为ARMX能识别的数据类型
%% 3.数据选择
%disp('用多少数据来预测:');
%Num=input('Num='); %数据量
Num=299; %经过试验,299比较好,训练数据量多了误差大
%disp('预测数据长度:'); % Num T 绝对误差
%T=input('T='); %测试数据长度 %
T=48; %
%
test = [];
P=[];
X=[];
for N=Num:Num+T-1
i=1;
%% 5.建模预测
m=armax(s(i:N),[1 1]); % ARMA模型阶次 7 7
p0=predict(x2(i:N+1),m,1); % 每一步均是单步预测过程
%% 6.反差分过程,输出数据
x=s0(N+1);
X=[X;x];
p=p0.outputdata;
p1=p;
p=p(N+1);
% t=i:N;
% o=polyfit(t',s0(i:N)-s(i:N),3); % 利用三次多项式拟合得到反差分过程的基准点
% z=polyval(o,N+1); %
% p=p+z';
% P=[P;p];
z=s0(N);
p=p+z;
M=max(s0(i:N))-3; % 这是加最大限制值的程序,需调试!
if p>M
p=(p+z)/2;
end
P=[P;p];
end
%%
x=X;
p=P;
%% 7.画图作比较
figure(4)
e=resid(m,s(i:N)); % 残差的自相关图
autocorr(e,25);
figure(5);
plot(x);
hold on
plot(p,'-.r') ;
hold off
title('风速序列预测和实测对比图');
xlabel('t/1h');ylabel('风速值 / m/s');
legend('实际值','预测值')
E = abs(x-p); %误差
disp('均方误差为:');
disp(mse(E)) %均方误差
disp('平均绝对误差为:');
disp(mean(E)) %平均绝对误差
disp('平均相对误差为:');
disp(mean(abs(E./x))) % 平均相对误差
figure(6)
bar(abs(E./x));
title('相对误差');
xlabel('时间/1h');ylabel('误差');
E./x;
save p2.mat p;
%% 这是加偏移量的程序,效果不是很好!需调整
p1(1)=s0(1);
for i=2:length(p1)
p1(i)=p1(i)+s0(i-1);
end
k=1;
c=[];
for a=-1.3:0.01:1.3
b(k)=mean(abs(s0(1:200)-p1(1:200)+a)./s0(1:200));
c=[c;a b(k)];
k=k+1;
end
plot(b)
min(c(:,2));
for k=1:size(c,1)
if c(k,2) == min(c(:,2))
d=c(k,1);
break;
end
end
d
p=p-d;
E = abs(x-p); %误差
disp('加偏移量均方误差为:');
disp(mse(E)) %均方误差
disp('加偏移量平均绝对误差为:');
disp(mean(E)) %平均绝对误差
disp('加偏移量平均相对误差为:');
disp(mean(abs(E./x))) % 平均相对误差
%% 加极值
for i=2:length(p)-1
if (p(i-1)-p(i))*(p(i)-p(i+1))<0
% p(i)=p(i-1); %上一时刻预测值
% p(i)=x(i-1); %上一时刻实际值
p(i)=(p(i)+p(i-1))/2; %做平均
i
end
end
E = abs(x-p); %误差
disp('极值处理均方误差为:');
disp(mse(E)) %均方误差
disp('极值处理平均绝对误差为:');
disp(mean(E)) %平均绝对误差
disp('极值处理平均相对误差为:');
disp(mean(abs(E./x))) % 相对误差
figure(7);
plot(x);
hold on
plot(p,'-.r') ;
hold off
title('加极值风速序列预测和实测对比图');
xlabel('t/1h');ylabel('风速值 / m/s');
legend('实际值','预测值')
ARIMA.rar_ARIMA 神经网络_arima_人工神经网络
版权申诉
139 浏览量
2022-09-24
07:53:24
上传
评论
收藏 2KB RAR 举报
局外狗
- 粉丝: 66
- 资源: 1万+