p=[ 1983 1984 1985 1986 1987 1988 19 1990 1991 1992 1993 1994 1995 1996 1997 ];
t=[1204 1720 2360 2570 3050 32 3348 3586 4208 4799 5252 5590 5931 95 7474];
pi= premnmx(p)
ti= premnmx(t)
pii=[-1.0000 -0.8571 -0.7143 -0.5714 -0.4286 -0.2857 -0.1429];
tii=[-1.0000 -0.8354 -0.6313 -0.53 -0.4112 -0.2223 -0.3161];
n=newff([-1,0],[2,1],{'tansig','purelin'},'trainlm'); %建立网络,注意各层调整节点数
n.trainparam.show=25; %设定参数
n.trainparam.goal=0.001; %精度不是越小越好,双向调整
n.trainparam.epochs=1000; %实际次数很小,调整对结果有影响
n=train(n,pii,tii); %训练网络
yi=sim(n,pii); %仿真输出,与ti对比
y1=(yi-tii)./tii %计算目标相对误差
pk=[0 0.1429 0.2857];
tk=[-0.2402 -0.0418 0.1467];
yk=sim(n,pk); %仿真检验,与tk对比
y2=(yk-tk)./tk %计算检验相对误差
pc=[0.4286 0.5714 0.7143 0.8571 1.0000]; %选择预测样本
y3=sim(n,pc) %模拟预测
*参数调整次序:隐层节点数、误差精度、训练次数。
% pi =
-1.0000 -0.8571 -0.7143 -0.5714 -0.4286 -0.2857 -0.1429 0 0.1429 0.2857 0.4286 0.5714 0.7143
0.8571 1.0000
ti =
-1.0000 -0.8354 -0.6313 -0.53 -0.4112 -0.2223 -0.3161 -0.2402 -0.0418
0.1467 0.2912 0.3990 0.5078 0.6877 1.0000
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 41.93 44.59 47.30 52. 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 36 11099 11203 10524 11115 13320 16762 18673 20724 20803 21804];
p=[sqrs;sqjdcs;sqglmj];
t=[glkyl;glhyl];
[pn ,minp,maxp,tn,mint,maxt]=premnmx(p,t);
dx=[-1,1;-1,1;-1,1];
net=newff(dx,[3,7,2],{'tansig','tansig','purelin'},'traingdx');
net.trainParam.show=1000;
net.trainParam.Lr=0.05;
net.trainParam.epochs=50000;
net.trainParam.goal=0.000001;
net=train(net,pn,tn);
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--',x,glkyl,'b--+');
legend('网络输出客运量','实际客运量');
xlabel('年份');ylabel('客运量/万人');
title('运用工具箱客运量学习和测试对比图');
subplot(2,1,2);
plot(x,newh,'r--',x,glhyl,'b--+');
legend('网络输出货运量','实际货运量');
xlabel('年份');ylabel('货运量/万吨');
title('运用工具箱货运量学习和测试对比图')
pnew=[73.39 75.55;3.9635 4.0975;0.98801 1.0268];
pnewn=tramnmx(pnew,minp,maxp);
anewn=sim(net,pnewn);
anew=postmnmx(anewn,mint,maxt)
function main()
SamNum=20;
TestSamNum=20;
ForcastSamNum=2;
HiddenUnitNum=8;
InDim=3;
OutDim=2;
a=[20.55 22.44 25.37 29.45 30.1 30.96 34.06 36.42 38.09 39.13 39.99 41.93 44.59 47.30 52. 55.73 56.76 59.17 60.63];
b=[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];
c=[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];
d=[5126 6217 7730 9145 10460 11387 12353 15750 18304 19836 21024 19490 20433 22598 25107 33442 36836 40548 42927 43462];
e=[1237 1379 1385 1399 1663 1714 1834 4322 8132 36 11099 11203 10524 11115 13320 16762 18673 20724 20803 21804];
p=[a,b,c];
t=[d;e];
[SamIn,minp,maxp,tn,mint,maxt]=premnmx(p,t);
rand('state',sum(100*clock));
NoiseVar=0.01;
Noise=NoiseVar*randn(2,SamNum);
SamOut=tn+Noise;
TestSamIn=SamIn;
TestSamOut=SamOut;
MaxEpochs=5000;
r=0.035;E0=0.65*10^(-3);
W1=0.5*rand(HiddenUnitNum,InDim)-0.1;B1=0.5*rand(HiddenUnitNum,1)-0.1;
W2=0.5*rand(OutDim,HiddenUnitNum)-0.1;
B2=0.5*rand(OutDim,1)-0.1;
ErrHistory=[];
for i=1:MaxEpochs
HiddenOut=logsig(W1*SamIn+repmat(B1,1,SamNum));
NetworkOut=W2*HiddenOut+repmat(B2,1,SamNum);
Error=SamOut-NetworkOut;
SSE=sumsqr(Error)
ErrHistory=[ErrHistory SSE];
if SSEDelta2=Error;Delta1=W2'*Delta2.*HiddenOut.*(1-HiddenOut);
dW2=Delta2*HiddenOut';
dB2=Delta2*ones(SamNum,1);
W2=W2+r*dW2;B2=B2+r*sB2;W1=W1+r*dW1;B1=B1+r*sB1;end
HiddenOut=logsig(W1*SamIn+repmat(B1,1,TestSamNum));
NetworkOut=W2*HiddenOut+repmat(B2,1,TestSamNum);
a=postmnmx(NetworkOut,mint,maxt);
x=1990:2009;
newk=a(1,:);
newh=a(2,:);
figure;subplot(2,1,1);
plot(x,newk,'r-o',x,glkyl,'b--+');
legend('wangluoshuchukeyunliang','shijikeyunliang');
xlabel('nianfen');ylabel('keyunrenshu');
title('1');title('2');
subplot(2,1,2);
plot(x,newh,'r-o',x,glhyl,'b--+');
legend('huoyunliang','shijihuoyunliang');
xlabel('nianfen');ylabel('huoyunliangg');
pnew=[73.39 75.55;3.9635 4.0975;0.98801 1.0268];
pnewn=tramnmx(pnew,minp,maxp);
HiddenOut=logsig(W1*pnewn+repmat(B1,1,ForcastSamNum));
anewn=W2*HiddenOut+repmat(B2,1,ForcastSamNum);
anew=postmnmx(anewn,mint,maxt)