有时候钻进去就是峰回路转的,偶尔也出来透透气吧,今天玩这个真心很累了,let's have a rest~
%%原始数据的输入
clc,clear
sqrs = [20.55 22.44 25.37 27.13 29.45 30.1 30.96 34.06 36.42 38.09 39.13 39.99 ...
%人数 单位:万人
sqjdcs = [0.6 0.75 0.85 0.90 1.05 1.35 1.45 1.60 1.70 1.85 2.15 2.20...
%机动车数 单位:万辆
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...
%公路面积 单位:万平方千米
glkyl = [5126 6217 7730 9145 10460 11387 12353 15750 18304 19836 21024....
%公路客运量 单位:万人
glhyl = [1237 1379 1385 1399 1663 1714 1834 4322 8132 8936 11099 11203 10524....
%公路货运量 单位:万吨
p = [sqrs;sqjdcs;sqglmj];
%输入数据矩阵
t = [glkyl;glhyl];
%目标矩阵
%%归一化处理
[pn,minp,maxp,tn,mint,maxt] = premnmx(p,t);
%对pt矩阵进行归一化处理
dx = [-1,1;-1 1;-1,1];
%
%BP网络训练
net = newff(dx,[3,7,2],{'tansig','tansig','purelin'},'traingdx');
%%建立模型,并用梯度下降法训练
net.trainParam.show = 1000;
00轮回显示一次
net.trainParam.Lr = 0.05;
%学习速率
net.trainParam.epochs = 50000;
%最大训练轮回
net.trainParam.goal = 0.65*10^(-3);
%均方误差
net = train(net,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('客运量/万人');
title('运用数据箱客运量学习和测试对比图');
subplot(2,1,2);
plot(x,newh,'r-o',x,glhyl,'b--+');
legend('网络输出货运量','实际货运量');
xlabel('年份');
ylabel('货运量/万吨');
title('运用数据箱货运量学习和测试对比图');
%利用训练好的网络进行预测
pnew = [73.39 75.55
pnewn = tramnmx(pnew,minp,maxp);
%利用原始输入数据的归一化参数对新参数进行归一化
anewn = sim(net,pnewn);
%利用归一化后的数据进行仿真
anew = postmnmx(anewn,mint,maxt)
%把仿真得到的数据还原原始的数量级
图形:
具体参数自己设置,这里我改小了些,时间用的比较短。