www.pudn.com > Volterraprediction.rar > original_MultiStepPred_main.m, change:2006-02-15,size:1849b


% 混沌时间序列的 Volterra 自适应预测(多步预测) -- 主函数

clc
clear
close all

disp('----- Lorenz 混沌序列 -----');    

%--------------------------------------------------
% 公共参数
k1 = 6000;              % 前面的迭代点数
k2 = 5000;              % 后面的迭代点数 (总样本数)

train_num = 1000        % 训练样本个数
p = 3                   % Volterra 阶数
Times = 5000            % 训练次数
c = 0.05                % 自适应收敛步长

%--------------------------------------------------
% 产生混沌序列

sigma = 10;             % Lorenz 方程参数 a
b = 8/3;                %                 b
r = 34;                 %                 c            

y = [-1,0,1];           % 起始点 (1 x 3 的行向量)
h = 0.01;               % 积分时间步长

z = LorenzData(y,h,k1+k2,sigma,r,b);
X = z(k1+1:end,1);
X = normalize_1(X);             % 归一化到均值为0,振幅为1

X_train = X(1:train_num);       % 训练样本 
X_pred = X(train_num+1:end);    % 预测样本 

%------------------------------------------------------
% 混沌序列的相空间重构 (phase space reconstruction)
tau = 6               % 时延
m = 7                 % 嵌入维数
[xn_train,dn_train] = PhaSpaRecon(X_train,tau,m);

%------------------------------------------------------
% 训练
[Wn,err_mse1] = original_train(xn_train,dn_train,p,Times+1,c);
err_mse1

%------------------------------------------------------
% 多步预测
X_pred_start = [X_train(end-(m-1)*tau:end)];
len_pred = 1000;
dn_pred = zeros(len_pred,1);
for i=1:len_pred
    xn_start = PhaSpaRecon(X_pred_start,tau,m);
    dn_pred(i) = original_test(xn_start,p,Wn);
    X_pred_start = [X_pred_start(2:end);dn_pred(i)];
end

dn_test = X_pred(1:len_pred);
end
%------------------------------------------------------
% 作图

n =1:length(dn_test);
plot(n,dn_test,'b+:'); hold on;
plot(n,dn_pred,'ro:');
title('多步预测 - 真实值''+'',预测值''o''');