登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
%%时间系列神经网络小波程序 %% 清空环境变量 clc clear %% 网络参数配置 load mohexiaoboliuliang input output input_test output_test M=size(input,2); %输入节点个数 N=size(output,2); %输出节点个数 n=7; %隐形节点个数 lr1=0.01; %学习概率 lr2=0.001; %学习概率 maxgen=2000; %迭代次数 %权值初始化 Wjk=randn(n,M);Wjk_1=Wjk;Wjk_2=Wjk_1; Wij=randn(N,n);Wij_1=Wij;Wij_2=Wij_1; a=randn(1,n);a_1=a;a_2=a_1; b=randn(1,n);b_1=b;b_2=b_1; %节点初始化 y=zeros(1,N); net=zeros(1,n); net_ab=zeros(1,n); %权值学习增量初始化 d_Wjk=zeros(n,M); d_Wij=zeros(N,n); d_a=zeros(1,n); d_b=zeros(1,n); %% 输入输出数据归一化 [inputn,inputps]=mapminmax(input'); [outputn,outputps]=mapminmax(output'); inputn=inputn'; outputn=outputn'; %% 网络训练 for i=1:maxgen %误差累计 error(i)=0; % 循环训练 for kk=1:size(input,1) x=inputn(kk,:); yqw=outputn(kk,:); for j=1:n for k=1:M net(j)=net(j)+Wjk(j,k)*x(k); net_ab(j)=(net(j)-b(j))/a(j); end temp=mymorlet(net_ab(j)); for k=1:N y=y+Wij(k,j)*temp; %小波函数 end end %计算误差和 error(i)=error(i)+sum(abs(yqw-y)); %权值调整 for j=1:n %计算d_Wij temp=mymorlet(net_ab(j)); for k=1:N d_Wij(k,j)=d_Wij(k,j)-(yqw(k)-y(k))*temp; end %计算d_Wjk temp=d_mymorlet(net_ab(j)); for k=1:M for l=1:N d_Wjk(j,k)=d_Wjk(j,k)+(yqw(l)-y(l))*Wij(l,j) ; end d_Wjk(j,k)=-d_Wjk(j,k)*temp*x(k)/a(j); end %计算d_b for k=1:N d_b(j)=d_b(j)+(yqw(k)-y(k))*Wij(k,j); end d_b(j)=d_b(j)*temp/a(j); %计算d_a for k=1:N d_a(j)=d_a(j)+(yqw(k)-y(k))*Wij(k,j); end d_a(j)=d_a(j)*temp*((net(j)-b(j))/b(j))/a(j); end %权值参数更新 Wij=Wij-lr1*d_Wij; Wjk=Wjk-lr1*d_Wjk; b=b-lr2*d_b; a=a-lr2*d_a; d_Wjk=zeros(n,M); d_Wij=zeros(N,n); d_a=zeros(1,n); d_b=zeros(1,n); y=zeros(1,N); net=zeros(1,n); net_ab=zeros(1,n); Wjk_1=Wjk;Wjk_2=Wjk_1; Wij_1=Wij;Wij_2=Wij_1; a_1=a;a_2=a_1; b_1=b;b_2=b_1; end end %% 网络预测 %预测输入归一化 x=mapminmax('apply',input_test',inputps); x=x'; %网络预测 for i=1:6 %此处需要根据输入预测数据调整 x_test=x(i,:); for j=1:1:n for k=1:1:M net(j)=net(j)+Wjk(j,k)*x_test(k); net_ab(j)=(net(j)-b(j))/a(j); end temp=mymorlet(net_ab(j)); for k=1:N y(k)=y(k)+Wij(k,j)*temp ; end end yuce(i)=y(k); y=zeros(1,N); net=zeros(1,n); net_ab=zeros(1,n); end %预测输出反归一化 ynn=mapminmax('reverse',yuce,outputps); %% 结果分析 figure(1) plot(ynn,'r*:') hold on plot(output_test,'bo--') title('预测漠河站水位','fontsize',12) legend('预测水位','实际水位') xlabel('时间点') ylabel('水位') 以上程序是时间系列小波神经网络。由于采用时间节点前的4个数据进行分析预报,所以能预测数据为n-4个数据,此次采用44组数据训练,6组数据验证的模式进行分析预报。程序中需要的函数在附件中,同时也有实验数据。 |