📄 xbsjwl1.m
字号:
clc
clear
%step 1=========================
%定义输入样本;
pp1=[46.1321 11.5723 33.1447 8.5220 0.6289
42.0168 33.6134 14.8459 8.9636 0.5602
33.6634 2.9703 33.1683 27.7228 2.4752
46.8085 36.8794 8.5106 7.5177 0.2837
39.1837 24.4998 18.3673 11.4286 6.5306
15.3260 22.1846 17.7815 44.7079 0
0.98114 3.83182 6.7987 28.3884 0
35.3516 51.1719 8.0078 5.4688 0
38.1862 31.0263 7.8759 22.9117 0
12.1512 40.5041 18.9019 28.3528 0.0900
];
%归一化;
kk=max(pp1');
for i=1:10
pp(i,:)=pp1(i,:)/kk(i);
end
mubiao11=[1 0 0 0 0
1 0 0 0 0
1 0 0 0 0
1 0 0 0 0
1 0 0 0 0
0 1 0 0 0
0 1 0 0 0
0 1 0 0 0
0 1 0 0 0
0 1 0 0 0
];
aerfa=1;eta=1;
%初始化连接权wjh(输出层和隐层的连接权);whi(隐层和输出层的连接权);
%假设小波函数节点数为:H个;样本数为P;
%输出节点数为:J个;输入节点数为:I个;
H=40;%隐层节点数;
P1=size(mubiao11);P=P1(1);%样本数;
I1=size(pp1);I=I1(2);%输入节点数;
J1=size(mubiao11);J=J1(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=1;%将p初始化;
%保存的误差;
Err_NetOut=[];kkk=0;ppp=0;
flag=1;count=0;%count为迭代的次数;
while flag>0
flag=0;
x=pp(p,:);
mubiao=mubiao11(p,:);
%step 2=================================
xhp1=0;
for h=1:H
for i=1:I
xhp1=xhp1+whi(i,h)*x(i);
end
ixhp(h)=xhp1+b1(h);
xhp1=0;
end
for h=1:H
oxhp(h)=fai((ixhp(h)-b(h))/a(h));
end
%step 3====================================
ixjp1=0;
for j=1:J
for h=1:H
ixjp1=ixjp1+wjh(h,j)*oxhp(h);
end
ixjp(j)=ixjp1+b2(j);
ixjp1=0;
end
for i=1:J
oxjp(i)=fnn(ixjp(i));
end
%step 6==保存每次误差=====
wuchayy=1/2*sumsqr(oxjp-mubiao);
%E_x=1/2*sumsqr(x);
Err_NetOut=[Err_NetOut wuchayy];%保存每次的误差;
%Err_rate=Err_NetOut/E_x;
%Err_rate
%oxjp
%求detaj ,detab2==================================
for j=1:J
detaj(j)=-(oxjp(j)-mubiao(j))*oxjp(j)*(1-oxjp(j));
end
for j=1:J
for h=1:H
detawjh(h,j)=eta*detaj(j)*oxhp(h);
end
end
detab2=eta*detaj;
%求detah, detawhi detab1 detab detaa;========================
sum=0;
for h=1:H
for j=1:J
sum=detaj(j)*wjh(h,j)*diffai((ixhp(h)-b(h))/a(h))/a(h)+sum;
end
detah(h)=sum;
sum=0;
end
for h=1:H
for i=1:I
detawhi(i,h)=eta*detah(h)*x(i);
end
end
detab1=eta*detah;
detab=-eta*detah;
for h=1:H
detaa(h)=-eta*detah(h)*((ixhp(h)-b(h))/a(h));
end
%引入动量因子aerfa,修正各个系数=========================
wjh=wjh+1*detawjh;
whi=whi+1*detawhi;
a=a+1*detaa';
b=b+1*detab';
b1=b1+1*detab1';
b2=b2+1*detab2';
%============================================
%判断所有的样本是否计算完=============================
if p==P
count=count+1;
ppp=ppp+1;
error=0;
for i=1:length(Err_NetOut)
error=error+Err_NetOut(i);
end
wuchaquxian(ppp)=error;%记入个次误差;
Err_NetOut=[];
if (error<0.01|count>95)
disp('the end of the proramm');
else
p=1;
flag=flag+1;
end
%disp('第一次训练完毕');
else
p=p+1;%计算下一组样本;
flag=flag+1;
end
end
%%=================================================================
%将训练好的网络用于故障诊断
p_test1=[
7.5 5.7 3.4 2.6 3.2
120.00 120.00 33.00 84.00 0.55
93 58 43 37 0
160 130 33 96 0
20.60 19.89 7.40 61.27 1.51
42 97 157 600 0
];
kkk=max(p_test1');
for i=1:6
p_test(i,:)=p_test1(i,:)/kkk(i);
end
%===========================================
ll=size(p_test);
for p=1:ll(1);
x=p_test(p,:);
%step 2=================================
xhp1=0;
for h=1:H
for i=1:I
xhp1=xhp1+whi(i,h)*x(i);
end
ixhp(h)=xhp1+b1(h);
xhp1=0;
end
for h=1:H
oxhp(h)=fai((ixhp(h)-b(h))/a(h));
end
%step 3====================================
ixjp1=0;
for j=1:J
for h=1:H
ixjp1=ixjp1+wjh(h,j)*oxhp(h);
end
ixjp(j)=ixjp1+b2(j);
ixjp1=0;
end
for i=1:J
oxjp(i)=fnn(ixjp(i));
end
yuce(p,:)=oxjp;
end
disp('预测结果');
disp(yuce);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -