clc;
clear;
format compact;
close all;
rng('default')
%% 读取数据
load data.mat;
f=data(1001:2000)';
% 采样时间
t = 1:length(f);
%% 记录真实值
[x,y]=data_process(f,12); %步长为12
n=size(x,1);
m=round(n*0.7); %前70%训练,对最后30%进行预测
PP_train=x(1:m,:)';
PP_test=x(m+1:end,:)';
TT_train=y(1:m,:)';
TT_test=y(m+1:end,:)';
%% EMD分解
[c,a,b]=emd(f); % c为分解后IMF分量,a一个数,b为1*N的向量
fs=1;
%计算每个IMF分量及最后一个剩余分量residual与原始信号的相关性
[m,n]=size(c);% %size()函数返回矩阵的行数和列数
%% 画出分解图
%画出每个IMF分量及最后一个剩余分量residual的图形
figure(1)
subplot(m+1,1,1) %m=5,分解得到5个IMF分量
plot(t,f)
%set(gca,'fontname','times New Roman')%表明字体等,可不用
%set(gca,'fontsize',14.0)
ylabel(['原始信号'])
%画出imf[i]的图形
for i=1:m-1
subplot(m+1,1,i+1);
set(gcf,'color','w')
plot(t,c(i,:),'k')
set(gca,'fontname','times New Roman')
%set(gca,'fontsize',14.0)
ylabel(['imf',int2str(i)]) %显示IMF1,2,3,4
end
%画残余分量
subplot(m+1,1,m+1);
set(gcf,'color','w')
plot(t,c(m,:),'k')
set(gca,'fontname','times New Roman')
%set(gca,'fontsize',14.0)
ylabel('res')
%% 分解完成
imf=c(2:end,:); %取出imf分量
%% EMD-GWO-SVR预测
pre_result2=[];
pre_result1=[];
%% 对每个分量建模
for i=1:size(imf,1)
disp(['对第',num2str(i),'个分量建模'])
[x,y]=data_process(imf(i,:),12); %步长为12
%% 划分数据
n=size(x,1);
m=round(n*0.7); %前70%训练,对最后30%进行预测
P_train=x(1:m,:)';
P_test=x(m+1:end,:)';
T_train=y(1:m,:)';
T_test=y(m+1:end,:)';
%% 划分训练集和测试集
M = size(P_train, 2);
N = size(P_test, 2);
%% 数据归一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input);
[t_train, ps_output] = mapminmax(T_train, 0, 1);
t_test = mapminmax('apply', T_test, ps_output);
EMD-GWO-SVR基于经验模态分解和灰狼算法优化支持向量机的时间序列预测MATLAB代码。(含SVR EMD-SVR GWO-SVR EMD-GWO-SVR等4个模型的对比)。