clear all;
clc;
load('MGS17.mat');
%%
%训练和测试集以及参数
train_data = MGS17(:,1:5000);
test_data = MGS17(:,4980:9979);
time_step = 20;
trnX = zeros(4980,20);
trnY = zeros(4980,1);
tstX = zeros(4980,20);
tstY = zeros(4980,1);
predictY = zeros(4980,1);
C = 0.1;
sigma = 0.2;
%%
%设置训练测试集输入输出
for i =1:length(train_data)-time_step
trnX(i,:) = train_data(:,i:time_step+i-1);
trnY(i,:) = train_data(time_step+i);
tstX(i,:) = test_data(:,i:time_step+i-1);
tstY(i,:) = test_data(time_step+i);
end
%%
%迭代更新测试集输入
testX = trnX(end,:);
[alpha,b,Cii,K0] = train(trnX,trnY,C,sigma);
for i = 1:length(test_data)-time_step
size = length(testX);
Kt = rbf(testX,trnX,sigma);
predictY(i,:) = Kt*alpha+b;
if i<length(test_data)-time_step
testX = [testX(2:end),predictY(i,:)]; %迭代更新
end
end
RMSe = sqrt(sum((tstY-predictY).^2)/length(predictY));
%%
%绘图
figure();
xlabel('time')
ylabel('MGS17')
title('recurive_predict')
plot(tstY,'b')
hold on
plot(predictY,'r')
legend('真实值','预测值');