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.3 42.5 0.39 1753.2 812.22;
116694 308765 6.65 0.3 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 12056 111257;
263595 130378 120356]';
a=[1 2 3 5 7 8];
P=p;
T=t;
%归一化处理,数据小于1的不必处理
for i=1:6
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,:)));
end
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)];
P_test=[P(:,8),P(:,9)];
T_test=[T(:,8),T(:,9)];%前7组数据做训练数据,后2组数据做测试数据
for i=1:5
net=newgrnn(P_train,T_train,i/10);%光滑因子分别为0.1到0.5
temp=sim(net,P_train);%网络对训练数据的逼近
j=3*i;
y_out(j-2,:)=temp(1,:);
y_out(j-1,:)=temp(2,:);
y_out(j,:)=temp(3,:);
temp=sim(net,P_test);%网络的预测输出
y(j-2,:)=temp(1,:);
y(j-1,:)=temp(2,:);
y(j,:)=temp(3,:);
end
y1=[y_out(1,:);y_out(2,:);y_out(3,:)];
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,:)];
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,:)];
%计算逼近误差
for i=1:7
error1(i)=norm(y1(:,1)-T_train(:,1));
error2(i)=norm(y2(:,1)-T_train(:,1));
error3(i)=norm(y3(:,1)-T_train(:,1));
error4(i)=norm(y4(:,1)-T_train(:,1));
error5(i)=norm(y5(:,1)-T_train(:,1));
end
%计算预测误差
for i=1:2
error6(i)=norm(y6(:,i)-T_test(:,i));
error7(i)=norm(y7(:,i)-T_test(:,i));
error8(i)=norm(y8(:,i)-T_test(:,i));
error9(i)=norm(y9(:,i)-T_test(:,i));
error10(i)=norm(y10(:,i)-T_test(:,i));
end
r=1:7;
figure(1)
plot(r,error1,'-*',r,error2,'-+',r,error3,'-h',r,error4,'-d',r,error5,'-o')%绘制逼近误差曲线
figure(2)
r=1:2;
plot(r,error6,'-*',r,error7,'-+',r,error8,'-h',r,error9,'-d',r,error10,'-o')%绘制预测误差曲线