close all
clear
echo on
clc
% NEWFF——生成一个新的前向神经网络
% TRAIN——对 BP 神经网络进行训练
% SIM——对 BP 神经网络进行仿真
% 定义训练样本
% P 为输入矢量
P=[0.7317 0.6790 0.5710 0.5673 0.5948;0.6790 0.5710 0.5673 0.5948 0.6292; ...
0.5710 0.5673 0.5948 0.6292 0.6488;0.5673 0.5948 0.6292 0.6488 0.6130; ...
0.5948 0.6292 0.6488 0.6130 0.5654; 0.6292 0.6488 0.6130 0.5654 0.5567; ...
0.6488 0.6130 0.5654 0.5567 0.5673;0.6130 0.5654 0.5567 0.5673 0.5976; ...
0.5654 0.5567 0.5673 0.5976 0.6269;0.5567 0.5673 0.5976 0.6269 0.6274; ...
0.5673 0.5976 0.6269 0.6274 0.6301;0.5976 0.6269 0.6274 0.6301 0.5803; ...
0.6269 0.6274 0.6301 0.5803 0.6668;0.6274 0.6301 0.5803 0.6668 0.6896; ...
0.6301 0.5803 0.6668 0.6896 0.7497];
% T 为目标矢量
T=[0.6292 0.6488 0.6130 0.5654 0.5567 0.5673 0.5976 ...
0.6269 0.6274 0.6301 0.5803 0.6668 0.6896 0.7497 0.8094];
% Ptest 为测试输入矢量
Ptest=[0.5803 0.6668 0.6896 0.7497 0.8094;0.6668 0.6896 0.7497 0.8094 0.8722; ...
0.6896 0.7497 0.8094 0.8722 0.9096];
% Ttest 为测试目标矢量
Ttest=[0.8722 0.9096 1.0000];
% 创建一个新的前向神经网络
net=newff(minmax(P'),[12,1],{'logsig','purelin'},'traingdm');
% 设置训练参数
net.trainParam.show = 50;
net.trainParam.lr = 0.05;
net.trainParam.mc = 0.9;
net.trainParam.epochs = 5000;
net.trainParam.goal = 0.001;
% 调用 TRAINGDM 算法训练 BP 网络
[net,tr]=train(net,P',T);
% 对 BP 网络进行仿真
A=sim(net,P');
figure;
plot((1993:2007),T,'-*',(1993:2007),A,'-o');
title('网络的实际输出和仿真输出结果,*为真实值,o 为预测值');
xlabel('年份');
ylabel('客运量');
% 对 BP 网络进行测试
A1=sim(net,Ptest');
figure;
plot((2008:2010),Ttest','-*',(2008:2010),A1,'-o');
title('测试后网络的实际输出和仿真输出结果,*为真实值,o 为预测值');
xlabel('年份');
ylabel('客运量');
% 计算仿真误差 error
E = T - A;
MSE=mse(E);
figure;
plot(1:length(E),E,'-.');
title('误差变化图')