clc;clearall;%设定期望的误差最小值err_goal=0.01;%设定最大循环次数max_epoch=50;%设定修正权值的学习速率0.01-0.7lr=0.7;epoch=0;x=0:0.01:0.3;%输入时间序列%d=sin(8*pi*x)+sin(4*pi*x)+5*sin(pi*x);%d=[123456789109876543212345678910987];%目标输出序列M=size(x,2);%输入节点的个数N=M;%输出节点的个数n=10;%隐形节点的个数%这个地方需要改进,由于实际上隐形节点的个数可以通过小波的时频分析确定Wjk=randn(n,M);Wij=randn(N,n);%a=randn(1,n);a=1:1:n;b=randn(1,n);%stepa=0.2*(x(M)-x(1));%a=stepa:1n-1)+stepa;%step=(x(M)-x(1))/n;%b=x(1)+step:step:x(1)+n*step;%y=zeros(1,N);%输出节点初始化y=zeros(1,N);%输出节点初始化net=zeros(1,n);%隐形节点初始化net_ab=zeros(1,n);%隐形节点初始化%step2--------对网络进行训练-------------------------------------------fori=1:1:Nforj=1:1:nfork=1:1:Mnet(j)=net(j)+Wjk(j,k)*x(k);net_ab(j)=(net(j)-b(j))/a(j);endy(i)=y(i)+Wij(i,j)*mymorlet(net_ab(j));%mymorlet是judyever编写的小波函数,以后可以扩展成输入不同的小波名字即可%y(i)=mysigmoid(2,y(i));endend%plot(x,d,'r',x,y);%title('训练前的目标序列和实际输出序列');err=d-y;SSE=err*err';%step3--------调整各个参数-------------------------------------------while(SSEerr_goal&epochmax_epoch)d_Wjk=zeros(n,M);d_Wij=zeros(N,n);d_a=zeros(1,n);d_b=zeros(1,n);fori=1:1:Nforj=1:1:nd_Wij(i,j)=-(d(i)-y(i))*mymorlet(net_ab(j));%调整d_Wij(i,j)fork=1:1:Md_Wjk(j,k)=d_Wjk(j,k)+(d(i)-y(i))*Wij(i,j);%计算还没有结束d_Wjk(j,k)=-d_Wjk(j,k)*d_mymorlet(net_ab(j))*x(k)/a(j);%计算结束end%调整d_Wjk(j,k)d_b(j)=d_b(j)+(d(i)-y(i))*Wij(i,j);%计算还没有结束d_b(j)=d_b(j)*d_mymorlet(net_ab(j))/a(j);%计算结束%调整d_b(j)d_a(j)=d_a(j)+(d(i)-y(i))*Wij(i,j);%计算还没有结束d_a(j)=d_a(j)*d_mymorlet(net_ab(j))*((net(j)-b(j))/b(j))/a(j);%计算结束%调整d_a(j)endend%step4--------网络重新计算-------------------------------------------Wij=Wij-lr*d_Wij;Wjk=Wjk-lr*d_Wjk;b=b-lr*d_b;a=a-lr*d_a;%修正各个权值y=zeros(1,N);%输出节点初始化net=zeros(1,n);%隐形节点初始化net_ab=zeros(1,n);%隐形节点初始化fori=1:1:Nforj=1:1:nfork=1:1:Mnet(j)=net(j)+Wjk(j,k)*x(k);net_ab(j)=(net(j)-b(j))/a(j);endy(i)=y(i)+Wij(i,j)*mymorlet(net_ab(j));%mymorlet是judyever编写的小波函数,以后可以扩展成输入不同的小波名字即可%y(i)=mysigmoid(2,y(i));endendepoch=epoch+1;err=d-y;SSE=err*err'/M;[epochSSE]end%step5--------输出-------------------------------------------plot(x,d,'r',x,y,':');title('训练后的目标序列和实际输出序列');%gtext({'Thisisthefirstline','Thisisthesecondline'})%gtext({'Firstline','Secondline'},'FontName','Times','Fontsize',12)legend('targetoutput','WNNoutput',1);