📄 bp1.m
字号:
%用BP网络实现非线性函数逼近。
clear;
clf;
clc;
P=0:0.025*pi:2*pi; %初始化!
T=1+sin(P);
r=1;
q=81;
s1=5;
s2=1;
W1=rands(s1,r);
DelW1=zeros(s1,r);
B1=rands(s1,1);
DelB1=zeros(s1,1);
A1=zeros(s1,q);
W2=rands(s2,s1);
DelW2=zeros(s2,s1);
B2=rands(s2,1);
DelB2=zeros(s2,1);
A2=zeros(s2,q);
GDel=zeros(s1,q);
Del=zeros(s1,q);
N1=zeros(s1,q);
N2=zeros(s2,q);
Eta=0.5;
SSE=1;
Z=0;
epoch=1500;
S=zeros(epoch,1);
for (x=1:epoch) %BP网络函数逼近!
if (SSE<0.0001)
break;
end;
DelE=zeros(q,1);
for (l=1:q)
for (i=1:s1)
GN1=0;
for (j=1:r)
GN1=GN1+W1(i,j)*P(j,l);
end;
N1(i,l)=GN1+B1(i,1);
A1(i,l)=1/(1+exp(-N1(i,l)));
end;
for (k=1:s2)
GN2=0;
for (i=1:s1)
GN2=GN2+W2(k,i)*A1(i,l);
end;
N2(k,l)=GN2+B2(k,1);
A2(k,l)=N2(k,l);
end;
for (k=1:s2)
E(k,l)=T(k,l)-A2(k,l);
end;
for (k=1:s2)
for (i=1:s1)
DelW2(k,i)=Eta*E(k,l)*A1(i,l);
end;
DelB2(k,1)=Eta*E(k,l)*1;
end;
for (i=1:s1)
for (k=1:s2)
GDel(i,l)=GDel(i,l)+E(k,l)*1*W2(k,i);
end;
Del(i,l)=GDel(i,l)*A1(i,l)*(1-A1(i,l));
for (j=1:r)
DelW1(i,j)=Eta*Del(i,l)*P(j,l);
end;
DelB1(i,1)=Eta*Del(i,l)*1;
end;
for (i=1:s1)
for (j=1:r)
W1(i,j)=W1(i,j)+DelW1(i,j);
end;
B1(i,1)=B1(i,1)+DelB1(i,1);
end;
for (k=1:s2)
for (i=1:s1)
W2(k,i)=W2(k,i)+DelW2(k,i);
end;
B2(k,1)=B2(k,1)+DelB2(k,1);
end;
for (k=1:s2)
DelE(l,1)=DelE(l,1)+E(k,l)*E(k,l);
end;
end;
DelSSE=0;
for (l=1:q)
DelSSE=DelSSE+DelE(l,1)*DelE(l,1);
end;
SSE=0.5*DelSSE;
S(1,x)=SSE;
Z=Z+1;
end;
Z
SSE
A2;
for (y=1:Z)
SS(1,y)=S(1,y);
end;
plot(SS);
pause
plot(P,T,'bo');
hold on
pause
plot(P,A2,'rd');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -