%原始数据的输入,具体程序为:
sqrts=[20.55 22.44 25.37 27.13 29.45 30.1 30.96 34.06 36.42 38.09 39.13 39.99 41.93 44.59 47.3 52.89 55.73 56.76 59.17 60.63];%人数(单位:万人)
sqjdcs=[0.6 0.75 0.85 0.9 1.05 1.35 1.45 1.6 1.7 1.85 2.15 2.2 2.25 2.35 2.5 2.6 2.7 2.85 2.95 3.1];%机动车数(单位:万辆)
sqglmj=[0.09 0.11 0.11 0.14 0.2 0.23 0.23 0.32 0.32 0.34 0.36 0.36 0.38 0.49 0.56 0.59 0.59 0.67 0.69 0.79];%公路面积
glkyl=[5126 6217 7730 9145 10460 11387 11387 15750 18304 19836 21024 19490 20433 22598 25107 33442 36836 40548 42927 43462];%公路客运量
glhyl=[1237 1379 1385 1399 1663 1714 1834 4322 8132 8936 11099 11203 10524 11115 13320 16762 18673 20724 20803 21804];%公路货运量
p=[sqrts;sqjdcs;sqglmj];%输入数据矩阵
t=[ glkyl; glhyl];%目标数据矩阵
%利用函数premnmx对数据进行归一化处理
[pn,minp,maxp,tn,mint,maxt]= premnmx(p,t);%对输入矩阵p和t进行归一化处理
dx=[-1 1;-1 1;-1 1];%归一化处理后最小值为-1,最大值为1
%BP训练
net=newff(dx,[3,7,2],{'tansig','tansig','purelin'},'traindx');
net.trainParam.show =1000;
net.trainParam.lr = 0.05;
net.trainParam.goal=0.65*10^3;
net.trainParam.epochs = 50000;
[net,tr]=train(net,pn,tn);
%利用训练好的BP网络对原始数据进行仿真,具体程序如下:
%an=sim(net,pn);
%a=postmnmax(an,mint,maxt); %把仿真得到的数据还原为原始的数量级
%用原始数据仿真的结果与已知数据进行对比
%x=1990:2009;
%newk=a(1,:);
%newh=a(2,:);
%figure(2);
%subplot(2,1,1);
%plot(x,newk,'r-o',x,glkyl,' b--+');
%legend
%xlabel
%title
%tubplot(2,1,2);plot(x,newh,'r-o',x,glhyl,' b--+');
%利用训练好的BP网络对新数据进行仿真,具体程序如下:
pnew=[73.79 75.55 3.9635 4.0975 0.9880 1.0268];
pnewn=tramnmx(pnew,minp,maxp);
anewn=sim(net,pnewn);
anew=postmnmx(anewn,mint,maxt);