function dyb %单样本程序
clc;
close all;
rand('state',sum(100*clock));
load('2_train.mat')
plot(x,f,'r*');
x1=-ones(1,101);
X=[x1;x]; %输入样本
d=f; %期望输出
P=101; %样本数量
Q=1; %样本维数
T=0.1; %阈值
J=input('请输入隐层节点数J='); %隐层节点数
W=rand(1,J); %输出层权值初始化
W=[T W];
V=rand(2,J); %隐层权值初始化
p=1; %样本模式计数器
q=1; %训练次数计数器
n=0.2 %学习率
Ep=0;
Emin=0.05 %训练精度
Erme=1 %总误差初始化
sum1=0 %迭代误差初值
while(Erme>Emin)
y=[];
for i=1:P
for j=1:J
net1(j)=V(:,j)'*X(:,i);
y(j)=logsig(net1(j));
y=[y y(j)];
end
y=y(1:J);
y=[-1 y];
net2(i)=W*y';
o(i)=net2(i);
s=d(i)-o(i); %每次迭代后的误差
sum1=sum1+s;
for j=1:J+1
e1(i)=d(i)-o(i); %输出层误差
e2(j)=(W*(e1(i)*ones(1,J+1))')*y(j)*(1-y(j)); %隐层误差
e2=[e2 e2(j)];
end
e2=e2(1:J);
dW=n*e1(i)*y;
dV1=n*e2*X(1,i);
dV2=n*e2*X(2,i);
dV=[dV1;dV2];
end
E=sqrt(sum1);
Ep=Ep+E^2;
W=W+dW;
V=V+dV;
if(p<P-1)
p=p+1;
q=q+1;
end
end
err=[err e1(i)];
Erme=sqrt(Ep/P);
if (Erme>Emin)
i=1;
p=1;
E=0;
end
display(['the final W is:',num2str(W)]);
display(['the final V(1) is:',num2str(V(1,:))])
display(['the final V(2) is:',num2str(V(2,:))])
end