混蛋理论 发表于 2015-7-28 16:55

一阶加权局域法,在线等

求吕金虎版的第五章一阶加权局域法的Matlab编程代码

happy 发表于 2015-9-23 10:02

个人收集到两个一阶加权局域发的代码,一致没机会使用,你可以试试看是否好用

该程序用加权一阶局域法对数据进行进行一步预测
%skyhawk
clear all;

m=6;   %嵌入维数
N=80;    %预测后N个点

A=load('kj.txt');
P=26; % 北空的平均循环周期=26

whl=A(:,4);
=size(whl);

% lmd_1=lyapunov(m,m,whl,whsl);%求lyapunov指数
% lmd_mm=lmd_1(m);
for j=1:whsl            
    whlsj(j)=whl(j);
end   

fch=0;
for i=whsl-N+1:whsl         %预测后N个点
    =lyapunov(m,whlsj,i-1,P);
    =pre_by_lya(m,lmd_m,whlsj,i-1,idx,min_d);%预测第i+1个点
   
    fch=fch+(y(i)-whl(i))*(y(i)-whl(i));
%   fch=fch+(z(i)-whl(i))*(z(i)-whl(i));
%   clear whlsj;

    iii=whsl-i   %显示进度
end

fch=sqrt(fch)/N

% for i=whsl-N+1:whsl
%   p(i-(whsl-N+1)+1)=y(i);
%   q(i-(whsl-N+1)+1)=z(i);
%   w(i-(whsl-N+1)+1)=whl(i);
% end

% kk=1:N;
% plot(kk,p,'r',kk,w)

yyy=;
save('kjyc.txt','yyy','-ASCII');

kk=1:whsl;
plot(kk,whl,'b',kk,y,'r')

happy 发表于 2015-9-23 10:03

该程序利用一阶局域加权法进行混沌时间序列的预测

%AOLMM多步预测函数
function = FunctionChaosPredict(Data,N,mtbp,deltaT,tao,d,MaxStep)
%Data是一维信号时间序列,N是信号数据长度,mtbp,deltaT,tao,d分别是重构相空间的平均时间序列、采样周期、时延及嵌入维
roll=Data;%取横摇数据
M = N - (d - 1)*tao;
for i = 1 : M
    for j = 1 : d
      MatrixX(i,j) = roll(i + (j - 1)*tao);
    end
end
%计算相空间中第M点与各点的距离
for j = 1 : (M - 1)
         Dis(j) = norm(MatrixX(M,:) - MatrixX(j,:),2);
end
%排序计算相空间中第M点的(m+1)个参考邻近点
for i = 1 : (d + 1)
    NearDis(i) = Dis(i);
    NearPos(i) = i;
end
for i = (d + 2) : (M - mtbp)
    for j = 1 : (d + 1)
      if (abs(i-j)>mtbp) %& abs(i-j)<10*mtbp
      if(Dis(i) < NearDis(j))
            NearDis(j) = Dis(i);
            NearPos(j) = i;
            break;
      end
      end
    end
end
SortedDis = sort(NearDis);
MinDis = SortedDis(1);
%计算第M点的(m+1)个参考邻近点的权P
SumP = 0;
for i = 1 : (d + 1)
    P(i) = exp(-NearDis(i)/MinDis);
    SumP = SumP + P(i);
end
P = P/SumP;
%用最小二乘法计算a[],b[]
for step=1:1:MaxStep
    aCoe1 = 0;
    aCoe2 = d;
    bCoe1 = 0;
    bCoe2 = 0;
    e = 0;
    f = 0;
    for i = 1 : (d + 1)
      aCoe1 = aCoe1 + P(i)*sum(MatrixX(NearPos(i),:));
      bCoe1 = bCoe1 + P(i)*(MatrixX(NearPos(i),:)*MatrixX(NearPos(i),:)');
      e = e + P(i)*(MatrixX(NearPos(i) + step,:)*MatrixX(NearPos(i),:)');
      f = f + P(i)*sum(MatrixX(NearPos(i) + step,:));
    end
    bCoe2 = aCoe1;
    CoeMatrix = ;
    ResultMatrix = ;
    abResult = pinv(CoeMatrix)*ResultMatrix;
    a = abResult(1);
    b = abResult(2);
for j = 1 : d
%   MatrixX(M + step,j) = a + b*MatrixX(M,j); %以历史上相近点的演化规律作为中心点的演化规律以中心点为基准进行预报
   
    MatrixX(M + step,j) = 0;
    for i = 1 : (d + 1)
      MatrixX(M + step,j) = MatrixX(M + step,j) + P(i)*(a + b*MatrixX(NearPos(i),j)); %以历史上相近点的演化加权和直接作为中心点的演化点进行预报
    end
end
%误差修正
    if M-tao+step+(d-1)*tao < N+1
      for j=1:d-1
            err(j)=MatrixX(M + step,j)-roll(M+step+(j-1)*tao);
      end
      ppp=1:d-1;ttt=err;neterr=newrbe(ppp,ttt);xxx=2:d;errp=sim(neterr,xxx);
      PredictedData(step) = MatrixX(M + step,d) - errp(d-1);
      roll(N+step)=PredictedData(step);
else
    PredictedData(step) = MatrixX(M + step,d);
   end%      roll(N+k)=PredictedData(k);
FChaosPredict(step) = PredictedData(step);
% FChaosPredict(step) = MatrixX(M + step,d);
end

happy 发表于 2015-9-23 10:03

在附送一个加权零阶局域法的代码

function Forcast=WZOLL1(data)
% Weighted zero-order local law,加权零阶局域预测法
% data为重构后的时间序列
% Xi中为临域的值
=size(data);
% 确定临域中的各个点到基准点的欧氏距离
Xk=data(row,:);%Xk为中心点
Distance=zeros(1,row-1);
for i=1:row-1
Mid=data(i,:);
Minus=Xk-Mid;
D=0;
for j=1:col
D=D+Minus(j)^2;
end
Distance(i)=sqrt(D);
end
% 找出欧式距离最小的M个点作为中心点的最近临域其值放在Xi中
M=2*col+1;
Xi=zeros(M,col);
% 确定Distance中的最小值
dm=min(Distance);
% D中为距离值
D=zeros(1,M);
for i=1:M
Midmin=min(Distance);
D(i)=Midmin;
[~,d]=find(Distance==Midmin);
d=d(1);
Xi(i,:)=data(d,:);
Distance(d)=nan;
end
%计算权重P
p=zeros(1,M);
for i=1:M
fenzi=exp(dm-D(i));
fenmu=0;
for j=1:M
fenmu=fenmu+exp(dm-D(j));
end
p(i)=fenzi/fenmu;
end
Forcast=zeros(1,col);
for i=1:M-1
Forcast=Forcast+p(i)*Xi(i+1,:);
end
% 处理奇异值 和零阶局域法计算的结果对比
% 计算加权零阶局域法预测出来的值
Test=mean(Xi,1);
if Test(col)/2>Forcast(col)
Forcast=mean(data(row-2:row,:));
end
end

混蛋理论 发表于 2015-9-23 12:50

happy 发表于 2015-9-23 10:03
在附送一个加权零阶局域法的代码

太感谢了,你会万福的!
页: [1]
查看完整版本: 一阶加权局域法,在线等