数学建模社区-数学中国

标题: BP神经网络MATLAB [打印本页]

作者: ppbear321    时间: 2009-8-12 13:23
标题: BP神经网络MATLAB
clear;clc;
X = [0:0.1:1];                      %样本点
N = length(X);                            
Nr = 6;                               %隐层节点数  
T=exp(X)+X.^2+sin(X);                 %逼近的函数
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 计算中心矢量
a = 0.2;
c = randn(1,Nr);
for k =1:N
    d = (X(k)*ones(1,Nr)-c).^2;
    [m,I]=min(d);
    c1 = c;
    c1(I) = c(I)+a*[X(k)-c(I)];
    c = c1;
    a = a/(1+sqrt(k/Nr));
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 计算方差
deta = zeros(1,Nr);
for k=1:N
    deta = deta + (X(k)*ones(1,Nr)-c).^2;
end
deta = deta/N;
%%%% 权值迭代
R = zeros(1,Nr);
W0 = 0.2*randn(1,Nr);
dww = 1;
a2 = 0.4;    % 更新步长
n2 = 0;      % 迭代次数
while dww>0.001
    W = W0;
    y = zeros(1,N);
    for k =1:N
        R = exp(-(X(k)*ones(1,Nr)-c).^2./(2*deta));
        y(k) = W*R';    % 输出
        dW = a2*(T(k)-y(k))*R;
        W = W+dW;       % 更新权值
    end
    dww = norm(W-W0);
    n2 = n2+1;
    W0 = W;
    dE = 0;
    for k =1:N
        dE = dE+1/2*(T(k)-y(k))^2;
    end
    E(n2) = dE;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 测试
t1 = [0:0.1:1];
Yout1 =zeros(1,N);
for i =1:N
    R = exp(-(t1(i)*ones(1,Nr)-c).^2./(2*deta));
    Yout1(i) = W*R';
end
t2 = [0:0.05:1];
Yout2 =zeros(1,length(t2));
for i =1:length(t2)
    R = exp(-(t2(i)*ones(1,Nr)-c).^2./(2*deta));
    Yout2(i) = W*R';
end
figure(1);
plot(t1,Yout1,'b-',t2,Yout2,'r+',X,T,'g-');
作者: 东方明珠-WDZYQ    时间: 2009-8-12 16:02
谢谢啦,用过的
作者: linhong33    时间: 2009-8-18 15:39
没看懂   新手   望前辈指教
作者: hxlovellysys    时间: 2009-8-23 13:31
不错,挺好
作者: zengtao880724    时间: 2009-8-26 15:44
好东西哦,继续~
作者: civilstar    时间: 2010-3-25 10:07
不错,很好的东西,感谢分享。。。。。
作者: zhanglincumt    时间: 2011-4-30 08:13
不错的东西啊
作者: 海之舟    时间: 2011-12-18 20:16
求教如何使用?




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5