如题下面是程序
clear all
clc
p=[ 1520 510 5.155 33.88;
1468 521 5.321 35.79;
2412 1140 5.32 25.89;
1750 129 4.7 23.8;
1688 361 4.865 27.08;
1607 489 5.1 28.9;
1200 127 4.56 19.84;
1990 148 4.89 29.373;
1509 511 5.12 34.3;
1730 133 4.46 23.06
];
t=[
0.7 1.9;
0.6 1.798;
0.8 1.289;
1 1.68;
0.8 1.149;
1.03 1.72;
1.8 1.095;
0.9 1.230 ;
0.8 1.35;
1.4 1.201
];
%对原始数据及目标数据进行归一化处理
for i=1:4
P(:,i)=(p(:,i)-min(p(:,i)))/(max(p(:,i))-min(p(:,i)));
end
for i=1:2
T(:,i)=(t(:,i)-min(t(:,i)))/(max(t(:,i))-min(t(:,i)));
end
[R,Q]=size(P);%{P,t}为训练集
alfa=0.01;
epsi=1.0e-7;
emax=0;
N=4;%输入层神经元
S=15;%隐含层神经元
M=2;%输出层神经元
flag=0;%记录上次最大误差emax
%初始化权值和阈值
w1=rand(S,N)*0.1;
b1=rand(S,1)*0.1;
w2=rand(M,S)*0.1;
b2=rand(M,1)*0.1;
%开始循环
while 1>0
i=i+1;
j=j+1;
%向前传播
a0=P(i,:);
a1=tansig(w1*a0'+b1);
a2=logsig(w2*a1+b2);
d=T(i,:)'-a2;
e=(d(1)+d(2))/2;
if abs(e)>emax
emax=abs(e);
end
%误差最小时,迭代停止
if i==R
if abs(emax-flag)>epsi
flag=emax;
else
break;
end
emax=0;
i=0;
end
%逼近优良时,迭代停止
if abs(e)
k=k+1;
else
k=0;
end
if k==R
break;
end
%计算敏感性
s2=-d;
s1=-w2'*d.*b1;
%s2=(d*a2)*(1-a2);
%s1=(d*w1)*b1*(1-b1);
%更新权值矩阵及阈值
w2=w2-alfa*s2*a1';
b2=b2-alfa*s2;
w1=w1-alfa*s1*(a0);
b1=b1-alfa*s1;
end
a0=P(1,:)
a1=tansig(w1*a0'+b1);
a2=logsig(w2*a1+b2)