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

📄 bam.m

📁 一个BAM神经网络的基本程序
💻 M
字号:
function main()
clear all;
%--------------根据某系统已知的故障征兆集和故障集作为训练样本求得权矩阵w--------------
a=[1 0 1 1 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 1 0 0 0
   0 1 0 0 0 0 1 1 1 0 1 0 0 0 0 1 0 0 1 1 1 0 0 0 0 0 0 0 1 0 0 0 1 1 1 1 0 0 1 0 0 0
   0 1 0 0 0 0 1 1 0 1 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 0 0 1 0 0 0 1 0 1 1 0 1 0 1 0 0 0 
   0 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 1 0 0 0
   0 1 0 0 0 0 1 1 1 0 0 0 1 1 1 0 1 0 0 1 0 1 0 0 0 0 0 1 1 0 0 1 0 0 1 0 1 0 1 0 0 0
   0 1 0 0 0 0 1 1 0 1 0 0 1 1 0 1 0 1 1 0 1 0 0 0 0 0 0 1 1 0 0 0 1 1 0 1 0 0 1 0 0 0
   0 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 1 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 1 0 0 0 
   1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 1 1 0 0 1 0 0 0 1
   0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 0 
   0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 1 1 0 0 1 0 1 0 0];
b=[1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
   0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
   0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
   0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
   0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
   0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
   0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 
   0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 
   0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 
   0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0];
dd=[0 1 0 1 1;1 0 1 0 0;1 0 1 0 1];
ee=[1 0 0 1;0 1 1 0;1 1 1 1];
dd0=dd*dd';
dd0
ee0=ee*ee';
ee0
   
aa=pretreatment1(a); %pretreatment1是一个子程序,将矩阵a中的0元素变成-1
bb=pretreatment1(b); %pretreatment1是一个子程序,将矩阵b中的0元素变成-1
aa
bb
w=aa'*bb;           %a为第一层的输出,b为第二层的输出,w为权矩阵
w
%---------------------检验根据该系统样本所得的权矩阵w的正确性-------------------------
bb1=a*w;
aa1=b*w';
bb1

b0=pretreatment2(bb1);%pretreatment2是一个子程序,将矩阵bb1中小于0的元素变成0,大于0的元素变为1
b0
a0=pretreatment2(aa1);%pretreatment2是一个子程序,将矩阵aa1中小于0的元素变成0,大于0的元素变为1
x=b0-b;
[m3,n3]=size(x);
if x==zeros(m3,n3)
    disp('a经过权值矩阵w再Hebb化=b,检验成功');
else
    disp('检验不成功');
end
y=a0-a;
[m4,n4]=size(y);
if y==zeros(m4,n4)
    disp('b经过权值矩阵w的转置再Hebb化=a,检验成功');
else
    disp('检验不成功');
end
%-----------------用户可以输入一个有意义的符合程序要求的矩阵或向量-----------------------
user = input('请输入一个n×42(n>=1)的只含有0或1元素的矩阵:','s')
user1=str2num(user);
user2=pretreatment1(user1); %pretreatment1是一个子程序,将矩阵user1中的0元素变成-1
user3=user2*w;
user4=pretreatment2(user3);%pretreatment2是一个子程序,将矩阵user3中小于0的元素变成0,大于0的元素变为1
user4                      %user4中1对应的即是故障原因












%lr=0.05;
%err_goal=0.001;
%max_epoch=10000;
%a=0.9;
%oi=0;ok=0;
%x=[1 1;-1 -1;1 1];
%t=[1 1;1 1];
%[m,n]=size(x);q=8;[l,n]=size(t);
%wij=rand(q,m);wki=rand(l,q);
%wij0=zeros(size(wij));wki0=zeros(size(wki));
%for epoch=1:max_epoch
    %neti=wij*x;
    %for j=1:n
        %for i=1:q
            %oi(i,j)=2/(1+exp(-neti(i,j)))-1;
        %end
    %end
    %netk=wki*oi;
    %for i=1:n
        %for k=1:l
            %ok(k,i)=2/(1+exp(-netk(k,i)))-1;
        %end
    %end
    %e=((t-ok)'*(t-ok))/2;
    %if (e<err_goal)
       % break;
    %end
    %deltak=ok.*(1-ok).*(t-ok);
    %w=wki;
    %wki=wki+lr*deltak*oi'+a*(wki-wki0);
   % wki0=w;
    %deltai=oi.*(1-oi).*(deltak'*wki)';
%    w=wij;
   % wij=wij+lr*deltai*x'+a*(wij-wij0);
  %  wij0=w;
%end
%epoch
%x1=x;
%neti=wij*x1;
%for j=1:n
    %for i=1;q
       % oi(i,j)=2/(1+exp(-neti(i,j)))-1;
    %end
%end
%netk=wki*oi;
%for i=1:n
    %for k=1:l
       % ok(k,i)=2/(1+exp(-netk(k,i)))-1;
   % end
%end
%ok
 
    

⌨️ 快捷键说明

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