gusucode.com > 《matlab在数学建模中的应用》一书 所有的 源代码 > 第7章/图7-8程序/toolboxglys.m
clc %原始数据 %人数(单位:万人) sqrs=[20.55 22.44 25.37 27.13 29.45 30.10 30.96 34.06 36.42 38.09 39.13 39.99 ... 41.93 44.59 47.30 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.20 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 12353 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=[sqrs;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'},'traingdx'); %建立模型,并用梯度下降法训练. net.trainParam.show=1000; %1000轮回显示一次结果 net.trainParam.Lr=0.05; %学习速度为0.05 net.trainParam.epochs=50000; %最大训练轮回为50000次 net.trainParam.goal=0.65*10^(-3); %均方误差 net=train(net,pn,tn); %开始训练,其中pn,tn分别为输入输出样本 %利用原始数据对BP网络仿真 an=sim(net,pn); %用训练好的模型进行仿真 a=postmnmx(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('年份');ylabel('客运量/万人'); subplot(2,1,2);plot(x,newh,'r-o',x,glhyl,'b--+') %绘制公路货运量对比图; legend('网络输出货运量','实际货运量'); xlabel('年份');ylabel('货运量/万吨'); %利用训练好的网络进行预测 % 当用训练好的网络对新数据pnew进行预测时,也应作相应的处理: pnew=[73.39 75.55 3.9635 4.0975 0.9880 1.0268]; %2010年和2011年的相关数据; pnewn=tramnmx(pnew,minp,maxp); %利用原始输入数据的归一化参数对新数据进行归一化; anewn=sim(net,pnewn); %利用归一化后的数据进行仿真; anew=postmnmx(anewn,mint,maxt) %把仿真得到的数据还原为原始的数量级;