📄 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 + -