小波神经网络预测的代码1

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

clc;

clear all;

%设定期望的误差最小值

err_goal=0.01;

%设定最大循环次数

max_epoch=50;

%设定修正权值的学习速率0.01-0.7

lr=0.7;

epoch=0;

x=0:0.01:0.3;%输入时间序列

%d=sin(8*pi*x)+sin(4*pi*x)+5*sin(pi*x);%

d=[1 2 3 4 5 6 7 8 9 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 9 8 7];%目标输出序列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--------对网络进行训练-------------------------------------------

for i=1:1:N

for j=1:1:n

for k=1:1:M

net(j)=net(j)+Wjk(j,k)*x(k);

net_ab(j)=(net(j)-b(j))/a(j);

end

y(i)=y(i)+Wij(i,j)*mymorlet(net_ab(j));

%mymorlet是judyever编写的小波函数,以后可以扩展成输入不同的小波名字即可

% y(i)=mysigmoid(2,y(i));

end

end

% plot(x,d,'r',x,y);

% title('训练前的目标序列和实际输出序列');

err=d-y;

SSE=err*err';

%step3--------调整各个参数-------------------------------------------

while (SSE>err_goal & epoch

d_Wjk=zeros(n,M);

d_Wij=zeros(N,n);

d_a=zeros(1,n);

d_b=zeros(1,n);

for i=1:1:N

for j=1:1:n

d_Wij(i,j)=-(d(i)-y(i))*mymorlet(net_ab(j));

%调整d_Wij(i,j)

for k=1:1:M

d_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)

end

end

%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);%隐形节点初始化

for i=1:1:N

for j=1:1:n

for k=1:1:M

net(j)=net(j)+Wjk(j,k)*x(k);

net_ab(j)=(net(j)-b(j))/a(j);

end

y(i)=y(i)+Wij(i,j)*mymorlet(net_ab(j));

%mymorlet是judyever编写的小波函数,以后可以扩展成输入不同的小波名字即可% y(i)=mysigmoid(2,y(i));

end

end

epoch=epoch+1;

err=d-y;

SSE=err*err'/M;

[ epoch SSE]

end

%step5--------输出-------------------------------------------

plot(x,d,'r',x,y,':');

title('训练后的目标序列和实际输出序列');

% gtext({'This is the first line','This is the second line'})

% gtext({'First line','Second line'},'FontName','Times','Fontsize',12) legend('target output','WNN output',1);

相关文档
最新文档