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-');