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

📄 waveletnet.m

📁 一个多输入多输出小波网络的源程序
💻 M
字号:
clc
clear
%step 1=========================
%定义输入样本;
x=[ 0.05 0.05 0.15 0.03;
    0.15 0.10 0.30 0.13;
    0.25 0.15 0.50 0.22;
    0.50 0.30 1.00 0.44;
    0.85 0.50 1.70 0.75];
targ=[0.9 0.1 0.1 0.1 0.1;
      0.1 0.9 0.1 0.1 0.1;
      0.1 0.1 0.9 0.1 0.1;
      0.1 0.1 0.1 0.9 0.1;
      0.1 0.1 0.1 0.1 0.9];

%数据初始化
%for i=1:4
%    x(:,i)=(x(:,i)-min(x(:,i)))/(max(x(:,i))-min(x(:,i)));
%end

eta=0.02;
aerfa=0.7;                                                                                                                                                                                                            
%step 2=========================
%初始化连接权wjh(输出层和隐层的连接权);whi(隐层和输出层的连接权);
%假设小波函数节点数为:H个;样本数为P;
%输出节点数为:J个;输入节点数为:I个;
H=8;
P=5;
I=4;
J=5;
PP=2;
%初始化小波参数
b=rand(H,1);
a=rand(H,1);
%初始化权系数;
whi=rand(I,H);
wjh=rand(H,J);
%阈值初始化;
b1=rand(H,1);
b2=rand(J,1);
p=0;
%保存的误差;
count=0;
Err_NetOut=[];
flag=1;
while flag>0
     flag=0;
count=count+1;

%step 3=================================
xhp1=zeros(P,H);
for i=1:P
   for h=1:H
       xhp1(i,h)=xhp1(i,h)+x(i,:)*whi(:,h);
       ixhp(i,h)=xhp1(i,h)+b1(h); 
    end       
end
for i=1:P
    for h=1:H
       oxhp(i,h)=fai((ixhp(i,h)-b(h))/a(h));
    end
end
%step 4====================================
ixjp1=zeros(P,J);
for i=1:P
     for j=1:J
        ixjp1(i,j)=ixjp1(i,j)+oxhp(i,:)*wjh(:,j);
        ixjp(i,j)=ixjp1(i,j)+b2(j);
     end   
end
oxjp=zeros(P,J);
for i=1:P
     for j=1:J
        oxjp(i,j)=oxjp(i,j)+fnn(ixjp(i,j));
     end
end
%step 5==保存每次误差=====
err=oxjp-targ;
wuchayy=1/2*sumsqr(max(abs(err(:,:))));
E_x=1/2*sumsqr(x);
Err_NetOut=[Err_NetOut wuchayy];%保存每次的误差;
Err_rate=Err_NetOut/E_x;%保存每次的相对误差;

%Err_rate

%oxjp

%求detaj ,detab2==================================
detaj=zeros(J,1);
for j=1:J
    for i=1:P
        detaj(j)=detaj(j)-(oxjp(i,j)-targ(i,j))*oxjp(i,j)*(1-oxjp(i,j));
    end
end
oxhp1=oxhp';
for j=1:J
    for h=1:H
        detawjh(h,j)=eta*oxhp1(h,j)*detaj(j);
    end
end
detab2=eta*detaj;

%求detah, detawhi detab1 detab detaa;========================

sum=zeros(1,H);
wjh1=wjh';
for h=1:H
    for j=1:J
        for i=1:P
            sum(h)=detaj(j)*wjh1(j,h)*diffai((ixhp(i,h)-b(h))/a(h))/a(h)+sum(h);
        end        
    end
end
detah=sum;
x1=x';
detawhi=zeros(I,H);
for h=1:H
    for i=1:I
        for k=1:P
            detawhi(i,h)=eta*x1(i,k)*detah(h)+detawhi(i,h);
        end
     end
 end
detab1=eta*detah;
detab=-eta*detah;
detaa=zeros(1,H);
for h=1:H
    for i=1:P
        detaa(h)=detaa(h)-eta*detah(h)*((ixhp(i,h)-b(h))/a(h));
    end
end

%step 6=========================
%引入动量因子aerfa,修正各个系数==========================================
wjh=wjh+(1+aerfa)*detawjh;
whi=whi+(1+aerfa)*detawhi;
a=a+(1+aerfa)*detaa';
b=b+(1+aerfa)*detab';
b1=b1+(1+aerfa)*detab1';
b2=b2+(1+aerfa)*detab2;

%%step 7=========================
%引入修正算法!!


%判断所有的样本是否计算完==================================
if Err_NetOut(end)>0.05
   flag=flag+1;
else
   figure;
   plot(Err_NetOut);
   title('误差曲线');
   disp('目标达到');
   disp(oxjp); 
end
if count>200
   figure;
   plot(Err_NetOut);
   title('误差曲线');
   disp('目标未达到');
   disp(oxjp);
   break;
end
end
Y=oxjp*(max(target)-min(target))+min(target)

    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -