clear;
clc;
%清空
load date.mat input output
%输入数据
k=rand(1,30);
[m,n]=sort(k);
%随机排序
intrain=input(n(1:27),:)';
outtrain=output(n(1:27));
intest=input(n(28:30),:)';
outtest=output(n(28:30));
%从30组数据中抽出28组作为训练组,2组作为测试组
[inn,inps]=mapminmax(intrain);
[outn,outps]=mapminmax(outtrain);
net=newff(inn,outn,[5 1],{'tansig' 'purelin'},'trainlm');
net.trainParam.lr=0.1;
net.trainParam.epochs=1000;
net.trainParam.goal=0.0001;
net=train(net,inn,outn);
%训练网络
intest=mapminmax('apply',intest,inps);
A=sim(net,intest);
B=mapminmax('reverse',A,outps);
%测试训练网络
figure(1)
plot(B,':og')
hold on
plot(outtest,'-*');
legend('预测输出','期望输出')
title('BP网络预测输出','fontsize',12)
ylabel('函数输出','fontsize',12)
xlabel('样本','fontsize',12)
E=B-outtest;
figure(3)
plot(E,'-*')
title('BP网络预测误差','fontsize',12)
ylabel('误差','fontsize',12)
xlabel('样本','fontsize',12)
figure(4)
plot((outtest-B)./B,'-*');
title('神经网络预测误差百分比')
%输出测试情况
ERRORsum=sum(abs(E));
QQ=abs(outtest-B)./B;
%QQ为测试组误差
UP=readmatrix('FD.xls','Sheet','Sheet1','Range','A2:F21');%读取预测数据
UP=UP.';%转置
[UPN,UPPS]=mapminmax(UP);%归一
UP1=sim(net,UPN);%预测
UP2=readmatrix('data7\data7.xls','Sheet','Sheet1','Range','A2:A21');%读取初次预测的结果
UP2=UP2.';%转置
[UP2N,UP2PS]=mapminmax(UP2);%归一
UP3=mapminmax('reverse',UP1,UP2PS);%反归一
xlswrite('FD.xls',UP3.','Sheet1','G2:G21');%输出预测数据