📄 bpwavelet_0222.m
字号:
function [A,DateInput,tr,MSE]=BPwavelet_0222(a,b,Y1,Y2,month,t,n)
load D1
load D2
load D3
load D4
load D5
load D6
load D7
load Qx
k=input('traintype:');
train_type=k;
k=input('errortype:');
error_type=k;
DateInput=[];
Dateget=[];
for i=1:7
Dateget=DateInput3(a,b,Y1,Y2,month,t+i-1);%输入训练数据
for j=0:16
DateInput(:,j*7+i)=Dateget(:,j+1);
end
end
Out=[];
for year=Y1:Y2
for i=1:7
Out=[Out,Qx(find(Qx(:,2)==year & Qx(:,3)==month & Qx(:,4)==t+i-1),5)];%流量期望输出
end
end
[pn,meanp,stdp,tn,meant,stdt]=prestd(DateInput,Out);
[ptrans,ptransMat]=prepca(pn,0.001);
[R,Q]=size(ptrans);
ptr=ptrans(:,1:12*7);
ttr=tn(:,1:12*7);
val_P=ptrans(:,12*7+1:16*7);
val_T=tn(:,12*7+1:16*7);
test_P=ptrans(:,16*7+1:17*7);
test_T=tn(:,16*7+1:17*7);
%将training、validation、test三部分时间序列分别做小波2层分解,
for i=1:a+b
[C_ptr(i,:),L_ptr(i,:)]=wavedec(ptr(i,:),2,'db3');
CA2_ptr(i,:)=appcoef(C_ptr(i,:),L_ptr(i,:),'db3',2);
CD2_ptr(i,:)=C_ptr(i,L_ptr(i,1)+1:L_ptr(i,1)+L_ptr(i,2));
CD1_ptr(i,:)=C_ptr(i,L_ptr(i,1)+L_ptr(i,2)+1:L_ptr(i,1)+L_ptr(i,2)+L_ptr(i,3));
[C_val_P(i,:),L_val_P(i,:)]=wavedec(val_P(i,:),2,'db3');
CA2_val.P(i,:)=appcoef(C_val_P(i,:),L_val_P(i,:),'db3',2);
CD2_val.P(i,:)=C_val_P(i,L_val_P(i,1)+1:L_val_P(i,1)+L_val_P(i,2));
CD1_val.P(i,:)=C_val_P(i,L_val_P(i,1)+L_val_P(i,2)+1:L_val_P(i,1)+L_val_P(i,2)+L_val_P(i,3));
[C_test_P(i,:),L_test_P(i,:)]=wavedec(test_P(i,:),2,'db3');
CA2_test.P(i,:)=appcoef(C_test_P(i,:),L_test_P(i,:),'db3',2);
CD2_test.P(i,:)=C_test_P(i,L_test_P(i,1)+1:L_test_P(i,1)+L_test_P(i,2));
CD1_test.P(i,:)=C_test_P(i,L_test_P(i,1)+L_test_P(i,2)+1:L_test_P(i,1)+L_test_P(i,2)+L_test_P(i,3));
end
i=1;
[C_ttr(i,:),L_ttr(i,:)]=wavedec(ttr(i,:),2,'db3')
CA2_ttr(i,:)=appcoef(C_ttr(i,:),L_ttr(i,:),'db3',2)
CD2_ttr(i,:)=C_ttr(i,L_ttr(i,1)+1:L_ttr(i,1)+L_ttr(i,2));%detcoef(C_ttr(i,:),L_ttr(i,:),'db3',2)
CD1_ttr(i,:)=C_ttr(i,L_ttr(i,1)+L_ttr(i,2)+1:L_ttr(i,1)+L_ttr(i,2)+L_ttr(i,3));%detcoef(C_ttr(i,:),L_ttr(i,:),'db3',1)
[C_val_T(i,:),L_val_T(i,:)]=wavedec(val_T(i,:),2,'db3');
CA2_val.T(i,:)=appcoef(C_val_T(i,:),L_val_T(i,:),'db3',2);
CD2_val.T(i,:)=C_val_T(i,L_val_T(i,1)+1:L_val_T(i,1)+L_val_T(i,2));%detcoef(C_val_T(i,:),L_val_T(i,:),'db3',2);
CD1_val.T(i,:)=C_val_T(i,L_val_T(i,1)+L_val_T(i,2)+1:L_val_T(i,1)+L_val_T(i,2)+L_val_T(i,3));%detcoef(C_val_T(i,:),L_val_T(i,:),'db3',1);
[C_test_T(i,:),L_test_T(i,:)]=wavedec(test_T(i,:),2,'db3');
CA2_test.T(i,:)=appcoef(C_test_T(i,:),L_test_T(i,:),'db3',2);
CD2_test.T(i,:)=C_test_T(i,L_test_T(i,1)+1:L_test_T(i,1)+L_test_T(i,2));%detcoef(C_test_T(i,:),L_test_T(i,:),'db3',2);
CD1_test.T(i,:)=C_test_T(i,L_test_T(i,1)+L_test_T(i,2)+1:L_test_T(i,1)+L_test_T(i,2)+L_test_T(i,3));%detcoef(C_test_T(i,:),L_test_T(i,:),'db3',1);
%对应的网络分别为net1(CA)、net2、net3(CD)
net1=newff(minmax(CA2_ptr),[n,1],{'tansig','purelin'},train_type,'',error_type);
net1.trainParam.show=50;
net1.trainParam.lr=0.05;
net1.trainParam.epochs=1000;
net1.trainParam.goal=0.001;
[net1,tr1]=train(net1,CA2_ptr,CA2_ttr,[],[],CA2_val,CA2_test);
plot(tr1.epoch,tr1.perf,tr1.epoch,tr1.vperf,tr1.epoch,tr1.tperf);
legend('Training','Validation','Test',-1);
ylabel('Sequence Error');xlabel('Epoch');
CA2_ptrans=[CA2_ptr,CA2_val.P,CA2_test.P];
%CA2_T=[CA2_ttr,CA2_val.T,CA2_test.T];
CA2_an=sim(net1,CA2_ptrans);
net2=newff(minmax(CD2_ptr),[n,1],{'tansig','purelin'},train_type,'',error_type);
net2.trainParam.show=50;
net2.trainParam.lr=0.05;
net2.trainParam.epochs=1000;
net2.trainParam.goal=0.001;
[net2,tr2]=train(net2,CD2_ptr,CD2_ttr,[],[],CD2_val,CD2_test);
plot(tr2.epoch,tr2.perf,tr2.epoch,tr2.vperf,tr2.epoch,tr2.tperf);
legend('Training','Validation','Test',-1);
CD2_ptrans=[CD2_ptr,CD2_val.P,CD2_test.P];
CD2_T=[CD2_ttr,CD2_val.T,CD2_test.T];
CD2_an=sim(net2,CD2_ptrans);
net3=newff(minmax(CD1_ptr),[n,1],{'tansig','purelin'},train_type,'',error_type);
net3.trainParam.show=50;
net3.trainParam.lr=0.05;
net3.trainParam.epochs=1000;
net3.trainParam.goal=0.001;
[net3,tr3]=train(net3,CD1_ptr,CD1_ttr,[],[],CD1_val,CD1_test);
plot(tr3.epoch,tr3.perf,tr3.epoch,tr3.vperf,tr3.epoch,tr3.tperf);
legend('Training','Validation','Test',-1);
CD1_ptrans=[CD1_ptr,CD1_val.P,CD1_test.P];
%CD1_T=[CD1_ttr,CD1_val.T,CD1_test.T];
CD1_an=sim(net3,CD1_ptrans);
C=[CA2_an,CD2_an,CD1_an];
L=[length(CA2_an),length(CD2_an),length(CD1_an),length(tn)];
an=waverec(C,L,'db2')
a=poststd(an,meant,stdt);
figure(1)
[m,b,r]=postreg(a,Out)
x=1:length(a);
plot(x,a,'c+:',x,Out,'ro-.')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -