clc
clear
t1 = tic;
%t1 = clock;
load data
%% 資料累加作為網路輸入
[n,m]=size(X);
for i=1:n
for j=1:m
y(i,j)=sum(X(1:i,j));
end
end
%% 網路引數初始化
a=0。3+rand(1)/4;
for k=1:(m-1)
b(k)=0。3+rand(1)/4;
end
%% 學習速率初始化
for k=1:(m-1)
u(k)=0。0015;
end
%% 權值閥值初始化
t=1;
w11=a;
w2(1,1)=-y(1,1);
for k=2:m
w2(k)=2*b(k-1)/a;
end
for k=1:m
w3(k)=1+exp(-a*t);
end
theta1=0;
for k=1:(m-1)
theta1=theta1+b(1,k)*y(1,(k+1))/a;
end
theta2=(1+exp(-a*t))*(theta1-y(1,1));
kk=1;
%% 迴圈迭代
for j=1:10
%迴圈迭代
E(j)=0;
for i=1:(n-6)
%% 網路輸出計算
t=i;
%LB層輸出
LB_b=1/(1+exp(-w11*t));
%LC層輸出
LC_c(1,1)=LB_b*w2(1,1);
for k=2:m
LC_c(k)=y(i,k)*LB_b*w2(1,k);
end
%LD層輸出
LD_d=0;
for k=1:m
LD_d=LD_d+w3(1,k)*LC_c(1,k);
end
%閥值
theta3=0;
for k=2:m
theta3=theta3+w2(1,k)*y(i,k)/2;
end
theta4=(1+exp(-w11*t))*(theta3-y(1,1));
%網路輸出值
ym=LD_d-theta4;
yc(i)=ym;
%% 權值修正
error=ym-y(i,1); %計算誤差
E(j)=E(j)+abs(error); %誤差求和
%計算誤差
for k=1:m
errorr(k)=error*(1+exp(-w11*t));
end
thetaE0=0;
for k=1:m
thetaE0=thetaE0+w2(1,k)*errorr(1,k);
end
thetaE=(1/(1+exp(-w11*t)))*(1-1/(1+exp(-w11*t)))*thetaE0;
%修改權值
for k=2:m
w2(1,k)=w2(1,k)-u(k-1)*errorr(1,k)*LB_b;
end
w11=w11+a*t*thetaE;
end
end
%畫誤差隨進化次數變化趨勢
figure(1)
plot(E)
title(‘訓練誤差’,‘fontsize’,12);
xlabel(‘進化次數’,‘fontsize’,12);
ylabel(‘誤差’,‘fontsize’,12);
%print -dtiff -r600 28-3
%根據訓出的神經網路進行預測
for i=(n-5):n
t=i;
LB_b=1/(1+exp(-w11*t)); %LB層輸出
LC_c(1,1)=LB_b*w2(1,1); %LC層輸出
for k=2:m
LC_c(1,k)=y(i,k)*LB_b*w2(1,k); %LC層輸出
end
LD_d=0;
for k=1:m
LD_d=LD_d+w3(1,k)*LC_c(1,k); %LD層輸出
end
theta5=0;
for k=2:m
theta5=theta5+w2(1,k)*y(i,k)/2;
end
theta6=(1+exp(-w11*t))*(theta5-y(1,1)); %閥值
ym=LD_d-theta6; %網路輸出值
yc(i)=ym;
end
yc=yc*10;
y(:,1)=y(:,1);
%計算預測
for j=n:-1:2
ys(j)=(yc(j)-yc(j-1))/10;
end
figure(2)
plot(ys((n-5):n),‘-*’);
hold on
plot(X((n-5):n,1),‘r:o’);
legend(‘預測值’,‘實際值’)
title(‘灰色神經網路預測’,‘fontsize’,12)
xlabel(‘x’,‘fontsize’,12)
ylabel(‘y’,‘fontsize’,12)