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),:)));
end
%对目标向量进行归一化处理
for i=1:3
T(i,:)=(t(i,:)-min(t(i,:)))/(max(t(i,:))-min(t(i,:)));
end
%训练样本,P_train为输入向量,T_train为目标向量
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为输入向量,T_test为目标向量
P_test=[P(:,8) P(:,9)];
T_test=[T(:,8) T(:,9)];
for i=1:5
net=newgrnn(P_train,T_train,i/10);
%网络对训练数据的逼近
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(:,i)-T_train(:,i));
error2(i)=norm(y2(:,i)-T_train(:,i));
error3(i)=norm(y3(:,i)-T_train(:,i));
error4(i)=norm(y4(:,i)-T_train(:,i));
error5(i)=norm(y5(:,i)-T_train(:,i));
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
%绘制逼近误差曲线
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');
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');
hold off;