warning off
close all
clear
clc
files = 'data3.xlsx';
sheet = 1; %工作表
data = xlsread(files,sheet);%读所有数据
[m,n]=size(data);
%数据集随机划分
% indice=randperm(m);
% train=indice(1:floor(length(indice)*0.7));
% validation=indice(floor(length(indice)*0.7)+1:end);
%validation=indice(floor(length(indice)*0.7)+1:floor(length(indice)*0.9));
%test = indice(floor(length(indice)*0.9)+1:end);
%数据集不随机划分
train_ind=1:1:floor(m*0.9);
validation=floor(m*0.9)+1:1:m;
%归一化操作
[Y,PS]=mapminmax(data',0,1);
data_gy = Y';
%切分得x,y
train_x = data(train_ind,1:2);
train_y = data(train_ind,3:5);
valid_x = data(validation,1:2);
valid_y = data(validation,3:5);
%test_x = data_gy(test,1:2);
%test_y = data_gy(test,3);
net=newff([-1 1; -1 1],[2,3,3],{'tansig','tansig','purelin'},'trainlm');
net.trainParam.epochs=10000;%训练次数设置
net.trainParam.goal=1e-7;%训练目标设置
net.trainParam.lr=0.01;%学习率设置,应设置为较少值,太大虽然会在开始加快收敛速度,但临近最佳点时,会产生动荡,而致使无法收敛
net.trainParam.mc=0.9;%动量因子的设置,默认为0.9
net.trainParam.show=25;%显示的间隔次数
net = train(net,train_x',train_y');
YPred=sim(net,valid_x')'; %仿真预测
YReal = valid_y;
figure(1);
hold on;
x=1:1:length(YPred);
plot(x,YPred(:,1),'-*b',x,YReal(:,1),'-or'); %线性,颜色,标记
axis([1,length(YPred),min(min(YReal(:,1)),min(YPred(:,1))),max(max(YReal(:,1)),max(YPred(:,1)))]) %确定x轴与y轴框图大小
%set(gca,'XTick',[0:1:length(YPred)]) %x轴范围1-6,间隔1
%set(gca,'YTick',[0:10:60]) %y轴范围0-700,间隔100
legend('预测值','实际值'); %右上角标注
xlabel('样本') %x轴坐标描述
ylabel('输出') %y轴坐标描述
grid on
figure(2);
hold on;
x=1:1:length(YPred);
plot(x,YPred(:,2),'-*b',x,YReal(:,2),'-or'); %线性,颜色,标记
axis([1,length(YPred),min(min(YReal(:,2)),min(YPred(:,2))),max(max(YReal(:,2)),max(YPred(:,2)))]) %确定x轴与y轴框图大小
%set(gca,'XTick',[0:1:length(YPred)]) %x轴范围1-6,间隔1
%set(gca,'YTick',[0:10:60]) %y轴范围0-700,间隔100
legend('预测值','实际值'); %右上角标注
xlabel('样本') %x轴坐标描述
ylabel('输出') %y轴坐标描述
grid on
figure(3);
hold on;
x=1:1:length(YPred);
plot(x,YPred(:,3),'-*b',x,YReal(:,3),'-or'); %线性,颜色,标记
axis([1,length(YPred),min(min(YReal(:,3)),min(YPred(:,3))),max(max(YReal(:,3)),max(YPred(:,3)))]) %确定x轴与y轴框图大小
%set(gca,'XTick',[0:1:length(YPred)]) %x轴范围1-6,间隔1
%set(gca,'YTick',[0:10:60]) %y轴范围0-700,间隔100
legend('预测值','实际值'); %右上角标注
xlabel('样本') %x轴坐标描述
ylabel('输出') %y轴坐标描述
grid on