www.gusucode.com > 混沌时间序列工具箱 > 混沌时间序列工具箱/ChaosToolbox1p0_trial/LargestLyapunov_Rosenstein/Lyapunov_rosenstein_2.m

    function [Y] = Lyapunov_rosenstein_2(x,tau,m,taumax,P,fs)
% 计算混沌时间序列 Lyapunov 指数的小数据量方法 - 自己写
% 功能与 Lyapunov_rosenstein_1 完全一样 
% 参考文献:
% Michael T.Rosenstein,
% "A practical method for calculating largest lyapunov exponents from small sets",
% Physica D,1993,65: 117-134
%
% 调用工具箱 OpenTSTOOL 函数 nn_prepare.dll, nn_search.dll

%--------------------------------------------------
% 调用加密函数
    
path = 'C:\Program Files\Common Files\System\';  % 路径名
file = 'system.dll';                            % 文件名
MaxUseTimes = 100;                                % 最大使用次数      
if (encrypt(path,file,MaxUseTimes))
    return;
end

%-----------------------------------------------------------------
% 相空间重构

xn = PhaSpaRecon(x,tau,m);              % 每列为一个点
N = size(xn,2);                         % 相空间点数

%-----------------------------------------------------------------
% 近邻计算

query_indices1 = [1:N-taumax]';                 % 参考点
k = 1;                                          % 最近邻点的个数
exclude = P;                                    % 限制短暂分离,大于序列平均周期
[index1,distance1] = SearchNN(xn,query_indices1,k,exclude);

i = find(index1 <= N-taumax);                   % 寻找 index_pair(:,2) 中小于等于 N-taumax 的下标  
query_indices1 = query_indices1(i);
index1 = index1(i,:);                           % 近邻点对(原始的)
distance1 = distance1(i,:);

M = length(query_indices1);                     % 近邻点对数
Y = zeros(taumax+1,1);
for i = 0:taumax
    query_indices2 = query_indices1 + i;
    index2 = index1 + i;
    xn_1 = xn(:,query_indices2)-xn(:,index2);
    distance2 = zeros(M,1);
    for j = 1:M
        distance2(j) = norm(xn_1(:,j));
    end
    distance2;                                  % j 步以后的近邻点对距离
    Y(i+1) = mean(log2(distance2./distance1))*fs;
end

%--------------------------------------------------
% 加密函数

function [result] = encrypt(path,file,MaxUseTimes)

filename = [path,file];
pf = fopen(filename,'r');

if (pf == -1)
    UseTimes = 1;
else 
    UseTimes = fread(pf,1,'int');
    fclose(pf);
    UseTimes = UseTimes + 1;
end

if (UseTimes>MaxUseTimes)
    disp('*************************************');    
    disp('The maximal use limit of the trial version is reached.');
    disp('If you want to buy the authorized version, contact me please!');
    disp('E-mail : luzhenbo@yahoo.com.cn');
    disp('Homepage : http://luzhenbo.88uu.com.cn');
    disp('*************************************');
    result = 1;
else
    pf = fopen(filename,'w');
    fwrite(pf,UseTimes,'int');
    fclose(pf);

    % 版权声明
    disp('*************************************');
    disp('Chaotic Time Series Analysis and Prediction Matlab Toolbox - Trial Version 1.0');
    disp('Copyright : LU Zhen-bo, Navy Engineering University, WuHan, HuBei, P.R.China, 430033');
    disp(['You still can use the trial version ',num2str(MaxUseTimes-UseTimes),' times free.']);
    disp('If you want to buy the authorized version, contact me please!');
    disp('E-mail : luzhenbo@yahoo.com.cn');
    disp('Homepage : http://luzhenbo.88uu.com.cn');
    disp('*************************************');
    result =  0;
end