📄 yichuanbp.m
字号:
function [e,y]=yichuanBP(p,o,M,endz_indiv)
%M是迭代次数
t=8.*ones(1,8);
t=cumsum(t);
t=[0 t];
wi=zeros(8,8);
wo=zeros(8,1);
wd=zeros(8,1);
xxi=0.79668;
xxd=0.56882;
xxo=0.13517;
for j=1:8
wi(j,:)=endz_indiv(1,t(j)+1:t(j+1));
wd(j)=endz_indiv(1,(64+j));
wo(j)=endz_indiv(1,72+j);
end
xj=zeros(8,1);
xj_1=xj;
e=zeros(1,86);
y=zeros(1,86);
N=0;
while N<M
N=N+1;
for k=1:86
Ini = p(k,:)';
yo=0; %放在这里,为了下面命令yo不会把所有样本的输出全部叠加
for j=1:8 %隐层节点数
sj(j)=wi(j,:)*Ini+wd(j)*xj_1(j);
xj(j)=(1-exp(-sj(j)))/(1+exp(-sj(j)));
yo=yo+xj(j)*wo(j);
xj_1(j)=xj(j);
end
y(k)=yo;
e(k) = o(k) - y(k);
pj=zeros(8,1);
for j=1:8
Pj(j)=wo(j)*(1+xj(j))*(1-xj(j))*xj_1(j);
end
Qij=zeros(8,8);
for j=1:8
for i=1:8
Qij(i,j)=wo(j)*(1+xj(j))*(1-xj(j))*Ini(i);
end
end
for j=1:8
wo(j)=wo(j)+xxo*e(k)*xj(j);
wd(j)=wd(j)+xxd*e(k)*Pj(j);
end
for j=1:8
for i=1:8
wi(i,j)=wi(i,j)+xxi*e(k)*Qij(i,j);
end
end
end
end
%[y1]=postmnmx(y,2330.7,2636.8);[o1]=postmnmx(o,2330.7,2636.8);e1=sum(e(1,:).*e(1,:))/86;
%plot([1:86],o1,[1:86],y1,'-r'),axis([1 86 2300 2700]);xlabel('测试样本'); ylabel('丙烯/ppm');legend('实际曲线','遗传算法');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -