⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bpwavelet_0222.m

📁 基于小波神经网络算法的流域日径流预报模型
💻 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 + -