声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2197|回复: 5

[分形与混沌] 关于小数据量法求李氏指数程序问题

[复制链接]
发表于 2011-12-13 10:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
如题,程序如下:
function lambda_1=largest_lyapunov_exponent(data,N,m,tau,P)
%the function is used to calcultate largest lyapunov exponent with the
%mended algorithm,which put forward by lv jing hu.
%data:the time series
%N:the length of data
%m:enbedding dimention
%tau:time delay
%P:the mean period of the time series,calculated with FFT
%lambda_1:return the largest lyapunov exponent
%skyhawk
delt_t=0.0001;
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;
    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
%     index(j)=idx_j;
    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
            d_j_i=d_j_i+(Y(kk,j+k)-Y(kk,idx_j+k))*(Y(kk,j+k)-Y(kk,idx_j+k));
            d(k,j)=d_j_i;
        end
    end
end

%对每个演化时间步长i,求所有的j的lnd(i,j)平均
[l_i,l_j]=size(d);
for i=1:l_i
    q=0;
    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,'--')
运行时出现问题如下:
??? Undefined function or variable "d".

Error in ==> largest_lyapunov_exponent at 41
[l_i,l_j]=size(d);
似乎是这个d未定义,这个d是不是关联维呢?该如何定义或计算?请各位大大不吝赐教!
回复
分享到:

使用道具 举报

 楼主| 发表于 2011-12-13 18:08 | 显示全部楼层
急盼解答
发表于 2011-12-15 20:02 | 显示全部楼层
回复 2 # winfast113 的帖子

d(k,j)=d_j_i;
d是这个二维数组,对于每个j,k的范围是1到max_i,但是j变化后max_i会变。
可以在程序开始对d初始化:d=zeros(M-2,M)
 楼主| 发表于 2011-12-16 00:08 | 显示全部楼层
回复 3 # hanqun1111 的帖子

谢谢。初始行数值为什么是M-2?
发表于 2011-12-16 23:06 | 显示全部楼层
回复 4 # winfast113 的帖子

数组d的每一列长度不同,确切的说行数设为M-p-2就够用了,尽量小些是为了减小内存。这个不重要,因为后面会判断d(i,j)是否为0,if d(i,j)=0的话就不用管它

 楼主| 发表于 2011-12-18 17:04 | 显示全部楼层
把d设置为[M-2,M]后,确实没报错了,但le计算结果显示为NaN,图像也不对
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-17 15:18 , Processed in 0.081334 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表