%% 清空环境变量
clear
clc
close all
num1 = xlsread('数据文件0.xlsx');
num = [];
for ii = 1:length(num1)-1
num = [num;num1(ii,:) num1(ii+1,:)];
end
%% 导入数据
n =randperm(length(num));
m=60;
P_train=num(n(1:m),1:3)';
T_train=num(n(1:m),4)';
P_test=num((1:3:end),1:3)';
T_test=num((1:3:end),4)';
%% 归一化
% 训练集
[Pn_train,inputps] = mapminmax(P_train,-1,1);
Pn_test = mapminmax('apply',P_test,inputps);
% 测试集
[Tn_train,outputps] = mapminmax(T_train,-1,1);
%Tn_test = mapminmax('apply',T_test,outputps);
% Pn_train = Pn_train';
% Tn_train = Tn_train';
% tic
%% ELM创建/训练
net=newelm(minmax(Pn_train),[3,1],{'logsig','tansig'},'traingdx');%建立网络模型,其中参数可以根据要求修改
net.trainparam.show=100;%每迭代100次显示1次
net.trainparam.epochs=2000;%最大迭代次数2000
net.trainparam.goal=0.001;%迭代目标
net=init(net);%初始化网络
[net,tr]=train(net,Pn_train,Tn_train);%训练网络
Tn_sim=sim(net,Pn_test );%仿真
% 反归一化
T_sim = mapminmax('reverse',Tn_sim,outputps);
% T_sim1 = mapminmax('reverse',Tn_sim1,outputps);
% toc
%% 结果对比
result = [T_test T_sim];
% 均方误差
E = mse(T_sim - T_test);
% 决定系数
N = length(T_test);
R2 = (N*sum(T_sim.*T_test)-sum(T_sim)*sum(T_test))^2/((N*sum((T_sim).^2)-(sum(T_sim))^2)*(N*sum((T_test).^2)-(sum(T_test))^2));
[MSE ,RMSE ,MBE, MAE ,MAPE] =MSE_RMSE_MBE_MAE(T_test,T_sim)
%% 绘图
figure (1)
plot(T_test(1,:),'r-*')
hold on
plot(T_sim(1,:),'b-o')
hold on
%plot('aa')
hold off
xlabel('测试集样本编号')
ylabel('测试集输出')
title('Elman测试集输出')
legend('期望输出','预测输出')
error1 = T_test-T_sim;
figure
plot(error1,'k-*')
ylabel('误差')