📄 grnnhuoyun.m
字号:
p=[ 58478 135185 5.46 0.23 16.5 0.21 1005.3 585.44;
67884 152369 5.46 0.27 18.7 0.26 1105.6 575.03;
74462 182563 6.01 0.25 21.6 0.28 1204.6 601.23;
78345 201587 6.12 0.26 25.8 0.29 1316.5 627.89;
82067 225689 6.21 0.26 30.5 0.31 1423.5 676.95;
89403 240568 6.37 0.28 34.9 0.33 1536.2 716.32;
95933 263856 6.38 0.28 39.8 0.36 1632.6 765.24;
104790 285697 6.65 0.30 42.5 0.39 1753.2 812.22;
116694 308765 6.65 0.30 46.7 0.41 1865.5 875.26];
t=[ 102569 52365 46251;
124587 60821 56245;
148792 69253 67362;
162568 79856 78165;
186592 91658 90548;
205862 99635 98758;
226598 109862 102564;
245636 120566 111257;
263595 130378 120356];
%设定需要归一的列序号
a=[1 2 3 5 7 8];
P=p;
%对输入向量进行归一化处理
for i=1:6
P(:,a(i))=(P(:,a(i))-min(P(:,a(i))))/(max(P(:,a(i)))-min(P(:,a(i))));
% P(a(i),:)=(P(a(i),:)-min(P(a(i),:)))/(max(P(a(i),:))-min(P(a(i),:)))
end
%对目标向量进行归一化处理
for i=1:3
T(:,i)=(t(:,i)-min(t(:,i)))/(max(t(:,i))-min(t(:,i)));
% T(i,:)=(t(i,:)-min(t(i,:)))/(max(t(i,:))-min(t(i,:)))
end
%训练样本,P_train(7*8)为输入向量,T_train(7*3)为目标向量
P_train=[P(1,:) ;P(2,:) ;P(3,:); P(4,:); P(5,:); P(6,:); P(7,:)];
%P_train=[P(:,1) P(:,2) P(:,3) P(:,4) P(:,5) P(:,6) P(:,7)]
T_train=[T(1,:) ;T(2,:); T(3,:); T(4,:); T(5,:); T(6,:) ;T(7,:)];
%T_train=[T(:,1) T(:,2) T(:,3) T(:,4) T(:,5) T(:,6) T(:,7)]
%测试样本,P_test(2*8)为输入向量,T_test(2*3)为目标向量
P_test=[P(8,:); P(9,:)];
%P_test=[P(:,8) P(:,9)]
T_test=[T(8,:) ;T(9,:)];
%T_test=[T(:,8) T(:,9)]
for i=1:5
net=newgrnn(P_train',T_train',i/10);
%对网络进行逼近
temp=sim(net,P_train');%temp(3*7)
j=3*i;%计算j=3,6,9,12,15,最后得出y_out(1,:)到y_out(15,:),y_out是一个3*7矩阵。共有五组光滑因子,所以有15*7
y_out(j-2,:)=temp(1,:);%y_out(15*7)
y_out(j-1,:)=temp(2,:);
y_out(j,:)=temp(3,:);
%对网络的预测输出%计算j=3,6,9,12,15,最后得出y(1,:)到y(15,:)y是一个3*2矩阵。共有五组光滑因子,所以有15*2
temp=sim(net,P_test');%temp(3*2)
y(j-2,:)=temp(1,:);%y(15*2)
y(j-1,:)=temp(2,:);
y(j,:)=temp(3,:);
end
%用“%{。。。。%}”来屏蔽一大段程序,必须另起一行
y1=[y_out(1,:);y_out(2,:);y_out(3,:)];%y1-y5分别为光滑因子为0.1-0.5时的训练样本输出y1-y5(3*7)
y2=[y_out(4,:);y_out(5,:);y_out(6,:)];
y3=[y_out(7,:);y_out(8,:);y_out(9,:)];
y4=[y_out(10,:);y_out(11,:);y_out(12,:)];
y5=[y_out(13,:);y_out(14,:);y_out(15,:)];
y6=[y(1,:);y(2,:);y(3,:)];%y6-y10分别为光滑因子为0.1-0.5时的预测样本输出y6-y10(3*2)
y7=[y(4,:);y(5,:);y(6,:)];
y8=[y(7,:);y(8,:);y(9,:)];
y9=[y(10,:);y(11,:);y(12,:)];
y10=[y(13,:);y(14,:);y(15,:)];
%计算逼近误差,
T_tr=T_train';
T_te=T_test';
for i=1:7
error1(i)=norm(y1(:,i)-T_tr(:,i));%error1(1)至error1(7)计算的是在光滑因子为0.1时,训练样本第一到七组样本的逼近误差
error2(i)=norm(y2(:,i)-T_tr(:,i));%error2(1)至error2(7)计算的是在光滑因子为0.2时,训练样本第一到七组样本的逼近误差
error3(i)=norm(y3(:,i)-T_tr(:,i));%error3(1)至error3(7)计算的是在光滑因子为0.3时,训练样本第一到七组样本的逼近误差
error4(i)=norm(y4(:,i)-T_tr(:,i));%error4(1)至error4(7)计算的是在光滑因子为0.4时,训练样本第一到七组样本的逼近误差
error5(i)=norm(y5(:,i)-T_tr(:,i));%error5(1)至error5(7)计算的是在光滑因子为0.5时,训练样本第一到七组样本的逼近误差
end
%计算预测误差
for i=1:2
error6(i)=norm(y6(:,i)-T_te(:,i));%error6(1)至error10(7)计算的是在光滑因子为0.1时,测试样本第一到七组样本的预测误差
error7(i)=norm(y7(:,i)-T_te(:,i));%error6(1)至error10(7)计算的是在光滑因子为0.2时,测试样本第一到七组样本的预测误差
error8(i)=norm(y8(:,i)-T_te(:,i));
error9(i)=norm(y9(:,i)-T_te(:,i));
error10(i)=norm(y10(:,i)-T_te(:,i));
end
%绘制逼近误差曲线
plot(1:7,error1,'-*');
hold on;
plot(1:7,error2,'-+');
hold on;
plot(1:7,error3,'-h');
hold on;
plot(1:7,error4,'-d');
hold on;
plot(1:7,error5,'-o');
legend('光滑因子0.1','光滑因子0.2','光滑因子0.3','光滑因子0.4','光滑因子0.5');
title('不同光滑因子对网络逼近误差的影响');
hold off;
figure;
%绘制预测误差曲线
plot(1:2,error6,'-*');
hold on;
plot(1:2,error7,'-+');
hold on;
plot(1:2,error8,'-h');
hold on;
plot(1:2,error9,'-d');
hold on;
plot(1:2,error10,'-o');
legend('光滑因子0.1','光滑因子0.2','光滑因子0.3','光滑因子0.4','光滑因子0.5');
title('不同光滑因子对网络预测误差的影响');
hold off;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -