function main()
alldatanum=200;
traindatanum=100;
testdatanum=100;
u=rands(1,alldatanum+1);
y=zeros(1,alldatanum+1);
for i=2:alldatanum+1
y(i)=0.5*u(i-1)-0.2*y(i-1);
end
alldatain=[];
alldataout=[];
for i=2:alldatanum+1
newin=[u(i-1);y(i-1)];
alldatain=[alldatain newin];
alldataout=[alldataout y(i)];
end
traindatain=alldatain(:,1:traindatanum);
traindataout=alldataout(:,1:traindatanum);
testdatain=alldatain(:,traindatanum+1:alldatanum);
testdataout=alldataout(:,traindatanum+1:alldatanum);
figure
hold on
grid
j=traindatanum+1:alldatanum
plot(j,testdatain,'k-')
xlabel('input t');
ylabel('output u');
figure
hold on
grid
j=traindatanum+1:alldatanum
plot(j,testdataout,'b-')
xlabel('input t');
ylabel('output y');
indim=2;
outdim=1;
hiddenunitnum=10;
maxepochs=10000;
E0=0.1;
center=2*rand(indim,hiddenunitnum)-1;
sp=0.2*rand(1,hiddenunitnum)+0.1;
w=0.2*rand(1,hiddenunitnum)-0.1;
lrcent=0.001;
lrsp=0.001;
lrw=0.001;
errorhistory=[];
for epoch=1:maxepochs
alldist=dist(center',traindatain);
spmat=repmat(sp',1,traindatanum);
unitout=radbas(alldist./spmat);
netout=w*unitout;
error=traindataout-netout;
SSE=sumsqr(error)
errorhistory=[errorhistory SSE];
if SSE<E0,break,end
for k=1:hiddenunitnum
centgrad=(traindatain-repmat(center(:,k),1,traindatanum))...
*(error.*unitout(k,:)*w(k)/(sp(k)^2))';
spgrad=alldist(k,:).^2*(error.*unitout(k,:)*w(k)/(sp(k)^3))';
wgrad=error*unitout(k,:)';
center(:,k)=center(:,k)+lrcent*centgrad;
sp(k)=sp(k)+lrsp*spgrad;
w(k)=w(k)+lrw*wgrad;
end
end
epoch
testdistance=dist(center',testdatain);
testspreadsmat=repmat(sp',1,testdatanum);
testhiddenunitout=radbas(testdistance./testspreadsmat);
testnnout=w*testhiddenunitout;
plot(j,testnnout,'r-')
figure
hold on
grid
[xx,num]=size(errorhistory);
plot(1:num,errorhistory,'r-');