ppbear321 发表于 2009-8-12 13:23

BP神经网络MATLAB

clear;clc;
X = ;                      %样本点
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;
    =min(d);
    c1 = c;
    c1(I) = c(I)+a*;
    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 = ;
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 = ;
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

求教如何使用?
页: [1]
查看完整版本: BP神经网络MATLAB