clc
clear
%网络参数配置
P=[0 0 0.62 0 0 0 0;
0.3915 0.4741 0.77 0.5 0.5 1 0.3158;
0.2835 0.5402 0.68 0 0.5 1 0.3158;
0.6210 1.0000 0.63 1 0.5 1 1.0000;
0.4158 0.4183 0.67 0.5 0 1 0.7368;
0.2160 0.4948 0.71 0 0 1 0.2632;
0.9990 0.0383 0.75 0.5 1 1 0.9474;
0.5805 0.4925 0.71 0 0 0 0.3684;
0.0810 0.0692 0.76 0 0 0 0.0526;
0.3915 0.1230 0.98 0.5 0 0 0.8974]';
T=[0 0.5313 0.5938 0.9375 0.4375 0.5000 1.0000 0.3750 0.3125 0.6563];
P_test=[0.0270 0.0742 0.62 0 0 0 0.2105;
0.1755 0.3667 0.77 0 0.5 1 0.7368;
0.4320 0.3790 0.68 0.5 0 1 0.2632;
0.4995 0.4347 0.63 0 0 1 0.6842;
0.6885 0.5842 0.67 0.5 0.5 1 0.4211;
0.5400 0.8038 0.71 0.5 0.5 1 0.5789;
0.1620 0.2565 0.75 0 0 1 0.4737]';
T_test=[0.1875 0.4062 0.4375 0.5938 0.6250 0.7187 0.3750];
M=7; %输入节点个数
N=1; %输出节点个数
n=7; %隐形节点个数
lr1=0.01; %学习概率
lr2=0.001; %学习概率
%权值初始化
Wjk=randn(n,M);
Wij=randn(N,n);
a=randn(1,n);
b=randn(1,n);
%节点初始化
y=zeros(1,N);
net=zeros(1,n);
net_ab=zeros(1,n);
%权值学习增量初始化
d_Wjk=zeros(n,M);
d_Wij=zeros(N,n);
d_a=zeros(1,n);
d_b=zeros(1,n);
%网络训练
for iii=1:100
error(iii)=0;
%循环训练
for kk=1:10
x=P(:,kk);
d=T(:,kk);
y=0;
for j=1:1:n
for k=1:1:M
net(j)=net(j)+Wjk(j,k)*x(k);
net_ab(j)=(net(j)-b(j))/a(j);
end
for i=1:N
y1= exp(-(net_ab(j).^2)/2) * cos(1.75*net_ab(j));
y=y+Wij(i,j)*y1; %小波函数
end
end
for i=1:N
error(iii)=error(iii)+abs(d(i)-y(i));
end
%权值调整
for j=1:n
%计算d_Wij
for i=1:N
d_Wij(i,j)=d_Wij(i,j)-(d(i)-y(i))*y1;
end
%计算d_Wjk
for k=1:1:M
for i=1:N
d_Wjk(j,k)=d_Wjk(j,k)+ (d(i)-y(i)) * Wij(i,j) ;
end
y2= -1.75*sin(1.75*net_ab(j)).*exp(-(net_ab(j).^2)/2)-net_ab(j)* cos(1.75*net_ab(j)).*exp(-(net_ab(j).^2)/2) ;
d_Wjk(j,k)=-d_Wjk(j,k)*y2*x(k)/a(j);
end
%计算d_b
for i=1:N
d_b(j)=d_b(j)+(d(i)-y(i))*Wij(i,j);
end
d_b(j)=d_b(j)*y2/a(j);
%计算d_a
for i=1:N
d_a(j)=d_a(j)+(d(i)-y(i))*Wij(i,j);
end
d_a(j)=d_a(j)*y2*((net(j)-b(j))/b(j))/a(j);
end
% 权值参数更新
Wij=Wij-lr1*d_Wij;
Wjk=Wjk-lr1*d_Wjk;
b=b-lr2*d_b;
a=a-lr2*d_a;
d_Wjk=zeros(n,M);
d_Wij=zeros(N,n);
d_a=zeros(1,n);
d_b=zeros(1,n);
y=zeros(1,N);
net=zeros(1,n);
net_ab=zeros(1,n);
end
end
% %网络预测
%值预测
kkk = 1;
for kk=1:7
P_test=P(kk,
;
for j=1:1:n
for k=1:1:M
net(j)=net(j)+Wjk(j,k)*P_test(k);
net_ab(j)=(net(j)-b(j))/a(j);
end
for i=1:N
y(i)=y(i)+Wij(i,j)*y1 ;
end
end
yuce=y(i);
%修正各个权值
y=zeros(1,N);%输出节点初始化
net=zeros(1,n);%隐形节点初始化
net_ab=zeros(1,n);%隐形节点初始化
kkk=kkk+1;
end
%结果分析
figure(1)
plot(yuce,'r:')
hold on
plot(T_test,'b--')
title('预测地震震级和实际地震震级比较')
legend('预测地震震级','实际地震震级')
ylabel('地震震级')
figure(2)
plot(T_test-yuce,'--')
title('预测误差')
ylabel('地震震级')
谁能帮我看看这个程序问题在哪里啊???急