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

📄 bp1.m

📁 用BP网络实现非线性函数逼近的一个简单的程序
💻 M
字号:
%用BP网络实现非线性函数逼近。
clear;
clf;
clc;
P=0:0.025*pi:2*pi;                     %初始化!
T=1+sin(P);
r=1;
q=81;
s1=5;
s2=1;
W1=rands(s1,r);
DelW1=zeros(s1,r);
B1=rands(s1,1);
DelB1=zeros(s1,1);
A1=zeros(s1,q);
W2=rands(s2,s1);
DelW2=zeros(s2,s1);
B2=rands(s2,1);
DelB2=zeros(s2,1);
A2=zeros(s2,q);
GDel=zeros(s1,q);
Del=zeros(s1,q);
N1=zeros(s1,q);
N2=zeros(s2,q);
Eta=0.5;
SSE=1;
Z=0;
epoch=1500;
S=zeros(epoch,1);
for (x=1:epoch)                        %BP网络函数逼近!
    if (SSE<0.0001)
        break;
    end;
    DelE=zeros(q,1);
    for (l=1:q)
        for (i=1:s1)
            GN1=0;
            for (j=1:r)
                GN1=GN1+W1(i,j)*P(j,l);
            end;
            N1(i,l)=GN1+B1(i,1);
            A1(i,l)=1/(1+exp(-N1(i,l)));
        end;
        for (k=1:s2)
            GN2=0;
            for (i=1:s1)
                GN2=GN2+W2(k,i)*A1(i,l);
            end;
            N2(k,l)=GN2+B2(k,1);
            A2(k,l)=N2(k,l);
        end;
        for (k=1:s2)
            E(k,l)=T(k,l)-A2(k,l);
        end;
        for (k=1:s2)
            for (i=1:s1)
                DelW2(k,i)=Eta*E(k,l)*A1(i,l);
            end;
            DelB2(k,1)=Eta*E(k,l)*1;
        end;
        for (i=1:s1)
            for (k=1:s2)
                GDel(i,l)=GDel(i,l)+E(k,l)*1*W2(k,i);
            end;
            Del(i,l)=GDel(i,l)*A1(i,l)*(1-A1(i,l));
            for (j=1:r)
                DelW1(i,j)=Eta*Del(i,l)*P(j,l);
            end;
            DelB1(i,1)=Eta*Del(i,l)*1;
        end;
        for (i=1:s1)
            for (j=1:r)
                W1(i,j)=W1(i,j)+DelW1(i,j);
            end;
            B1(i,1)=B1(i,1)+DelB1(i,1);
        end;
        for (k=1:s2)
            for (i=1:s1)
                W2(k,i)=W2(k,i)+DelW2(k,i);
            end;
            B2(k,1)=B2(k,1)+DelB2(k,1);
        end;
        for (k=1:s2)
            DelE(l,1)=DelE(l,1)+E(k,l)*E(k,l);
        end;
    end;
    DelSSE=0;
    for (l=1:q)
        DelSSE=DelSSE+DelE(l,1)*DelE(l,1);
    end;
    SSE=0.5*DelSSE;
    S(1,x)=SSE;
    
    Z=Z+1;
end;
Z
SSE
A2;
for (y=1:Z)
    SS(1,y)=S(1,y);
end;
plot(SS);
pause
plot(P,T,'bo');
hold on
pause
plot(P,A2,'rd');

⌨️ 快捷键说明

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