⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dt2rbfgjnet.m

📁 毕业论文里的程序,RBF神经网络拟合大迟延对象的程序
💻 M
字号:
function main()
alldatanum=400;
traindatanum=200;
testdatanum=200;
sp=2.4;
errorlimit=0.000001;

u=rands(1,alldatanum+10);
y=zeros(1,alldatanum+10);
for i=3:alldatanum+2
    y(i)=u(i-1)+0.5*u(i-2)+1.5*y(i-1)-0.7*y(i-2);
end

alldatain=[];
alldataout=[];
for i=3:alldatanum+2
    newin=[u(i-1);y(i-1);u(i-2);y(i-2)];
    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,maxunitnum]=size(traindatain);

distance=dist(traindatain',traindatain);
hiddenunitout=radbas(distance/sp);

posselected=[];
vectorsselected=[];
hiddenunitoutselected=[];
errorhistory=[];

vectorsselectfrom=hiddenunitout;

dd=sum((traindataout.*traindataout)')';
for k=1:maxunitnum
    pp=sum(vectorsselectfrom.*vectorsselectfrom)';
    denominator=dd*pp';
    [xxx,selectednum]=size(posselected);
    if selectednum>0,
        [lin,xxx]=size(denominator);
        denominator(:,posselected)=ones(lin,1);
    end
    angle=((traindataout*vectorsselectfrom).^2)./denominator;
    
    [value,pos]=max(angle);
    posselected=[posselected pos];
    
    hiddenunitoutselected=[hiddenunitoutselected;hiddenunitout(pos,:)];
    hiddenunitoutex=[hiddenunitoutselected;ones(1,traindatanum)];
    w2ex=traindataout*pinv(hiddenunitoutex);
    w2=w2ex(:,1:k);
    b2=w2ex(:,k+1);
    nnout=w2*hiddenunitoutselected+b2;
    SSE=sumsqr(traindataout-nnout)
    
    errorhistory=[errorhistory SSE];
    
    if SSE<errorlimit,break,end
    
   newvector=vectorsselectfrom(:,pos);
   projectionlen=newvector'*vectorsselectfrom/(newvector'*newvector);
   vectorsselectfrom=vectorsselectfrom-newvector*projectionlen;
end

unitcenters=traindatain(:,posselected);

testdistance=dist(unitcenters',testdatain);
testhiddenunitout=radbas(testdistance/sp);
testnnout=w2*testhiddenunitout+b2;
plot(j,testnnout,'r-')

k
unitcenters
w2
b2

figure
hold on
grid
[xx,num]=size(errorhistory);
plot(1:num,errorhistory,'r-');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -