zebtra_stripe 发表于 2009-11-9 15:19

帮忙看看这个程序lyapunov_exponent

高手们:帮忙小弟看看这个计算lyapunov_exponent的程序哪儿有点不对劲
为什么我明明时间序列,相空间图,功率谱变现出来的都是混沌,而算出来的是两个负值啊?郁闷。。。
pp = -0.0002   -4.6021


程序如下:
clc
clear
delt_t=1;
t=load('C:\Documents and Settings\Administrator\桌面\matlab2.mat');
data=t.data;
data(1:500)=[];% 列向量
data=data(1,:)';
N=length(data);%时间序列长度
max=max(data);% 最大离散步进时间
data=data/max;
P=fft(data);% 序列平均周期
m=2;% 嵌入维
tau=1;% 时延
Y=reconstitution(data,N,m,tau );%reconstitute state space
M=N-(m-1)*tau;%M is the number of embedded points in m-dimensional space
for j=1:M
    d_max=1e+100;
    idx_j=2;
    for jj=1:M                                              %寻找相空间中每个点的最近距离点,并记下
      d_s=0;                                              %该点下标
      if abs(j-jj)>P                                    %限制短暂分离
            for i=1:m
                d_s=d_s+(Y(i,j)-Y(i,jj))*(Y(i,j)-Y(i,jj));
                d_min=d_max;
                if d_s<d_min
                   d_min=d_s;
                   idx_j=jj;
               end
            end
      end
    end

    max_i=min((M-j),(M-idx_j));%计算点j的最大演化时间步长i
   
    for k=1:max_i            %计算点j与其最近邻点在i个离散步后的距离
      d_j_i=0;
      for kk=1:m-1
            d_j_i=d_j_i+(Y(kk,j+k-1)-Y(kk,idx_j+k-1))*(Y(kk,j+k-1)-Y(kk,idx_j+k-1));
            d(k,j)=d_j_i;
      end
    end
end
%对每个演化时间步长i,求所有的j的lnd(i,j)平均
=size(d);
for i=1:l_i
    q=1;
    y_s=0;
    for j=1:l_j
      if d(i,j)~=0
            q=q+1;
            y_s=y_s+log(d(i,j));
      end
    end
    y(i)=y_s/(q*delt_t);
end
x=1:length(y);
pp=polyfit(x,y,1);
lambda_1=pp(1);
yp=polyval(pp,x);
plot(x,y,'-o',x,yp,'--');
legend('临近点曲线','拟合直线');
pp

lushuang8 发表于 2009-11-9 22:53

回复

楼主说的不全面,怎么帮你啊!

zebtra_stripe 发表于 2009-11-10 08:52

缺少什么呢?告诉我,我来补补。是data数据么?
可是数据没问题 ,是程序有问题,先帮我看看咯
页: [1]
查看完整版本: 帮忙看看这个程序lyapunov_exponent