📄 arjianjie.asv
字号:
clear;
%%%AR
% load Eunitefhgz.mat %% Eunitef competition-data 2001
load Eunitefhgz97.mat
e=0.001;
NN=109; %%采样次数
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% for h=1:1:48
% for i=1:1:700
% y(h,i)=fh((i-1)*48+h); %% 按每天48小时组成矩阵
% end
% end
fhysh=fhysh/100;
for h=1:1:48
for i=1:1:250
y(h,i)=fhysh((i-1)*48+h); % 按每天48小时组成矩阵
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for d=1:1:48
% for p=5:1:15 %% 模型阶数
p=10;
start=1; %%开始
Y=0;
canshu=0;
P=0;
% tail=start+NN*p; %%结尾
P=1/e*eye(p,p); %% 初始化 P0
for i=1:1:p %% 初始化 canshu(:,1);
canshu(i,1)=0;
end
for N=1:1:NN %% 采样次数
for i=1:1:p
Y(i,N+1)=y(d,start+(N-1)+p-i);%%% 顺序是从前向后,最后一个数是114,滚动的取值,每循环一次N,多一个
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ZZ=1/(1+Y(:,N+1)'*P(:,:,N)*Y(:,N+1));%% 实数
P(:,:,N+1)=P(:,:,N)-ZZ*P(:,:,N)*Y(:,N+1)*Y(:,N+1)'*P(:,:,N); %
canshu(:,N+1)=canshu(:,N)+P(:,:,N+1)*Y(:,N+1)*(y(d,start+(N-1)+p)-Y(:,N+1)'*canshu(:,N));%%Yt
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:1:p
fai(p,N+1,i)=canshu(i,N+1);%% 记录一下,用于以后预报
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% BB=0;
% for k=1:1:p
% BB=BB+canshu(k,N+1)*y(d,start+(N-1)+p-k);%%==Y(t-k)
% end
% a(N+1)=y(d,start+(N-1)+p)-BB; %%计算残差
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end%% NN
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% AA=0;
% for kk=1:1:NN
% AA=AA+a(kk)*a(kk);
% end
% cetapf(p)=1/NN*AA;
% cetaxingpf(p)=(p)*cetapf(p)/NN;
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% end%% p
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% sum=0;
% for jj=5:1:14
%
% cha(jj)=cetaxingpf(jj+1)-cetaxingpf(jj);
% if cha(jj)<0.0001 %%%表示前后两个cetaxingpf非常接近,趋于稳定
% sum=sum+1; %%计数
% end
% if sum>=1
% sum=0;
% ii=jj-3; %% 最佳参数
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 防止ii比p小
% if ii<5
% ii=5;
% end
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% break;
% end
% end
%
CC=0;
DD=0;
EE=0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 预报
for i=1:1:ii
CC=CC+fai(ii,NN+1,i)*y(d,NN+start-i); %%接近预报那天的前P个数来预报,不管优化的P是多大,都是预报最大P的后面的三天,而fai是倒着取的,假如fai比P小,就取后面几个数作为fai
end
yb(d,NN+start)=CC;
for i=2:1:ii
DD=DD+fai(ii,NN+1,i)*y(d,NN+start+1-i);
end
yb(d,NN+start+1)=DD+fai(ii,NN+1,1)*yb(d,NN+start);
for i=3:1:ii
EE=EE+fai(ii,NN+1,i)*y(d,NN+start+2-i);
end
yb(d,NN+start+2)=EE+fai(ii,NN+1,1)*yb(d,NN+start)+fai(ii,NN+1,2)*yb(d,NN+start+1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end%% d
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 计算误差
for i=1:1:48
wucha1(i)=(y(i,NN+start)-yb(i,NN+start))/y(i,NN+start)*100;
end
for i=1:1:48
wucha2(i)=(y(i,NN+start+1)-yb(i,NN+start+1))/y(i,NN+start+1)*100;
end
for i=1:1:48
wucha3(i)=(y(i,NN+start+2)-yb(i,NN+start+2))/y(i,NN+start+2)*100;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% wucha=[wucha1 wucha2 wucha3];
i=1:1:48;plot(i,wucha1(i),i,wucha2(i),i,wucha3(i),'-');grid on;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -