winterdij 发表于 2007-7-27 10:44

cc方法的matlab程序怎么使用啊?

我在网上找到了下面这个程序 ,是cc方法计算时间延迟和嵌入维数的,但不知道怎么使用,不知道如何给“data”赋值,我用了很多方法给data赋值,但结果都是“1111”。不明白这到底是怎么回事,希望高手给我指明方向。谢谢了。:@L :@L :@L :@L
Chaos Toolbox Ver.2.0中的C_CMethod
原程序:
function =C_CMethod(data)
%this function calculate time delay and embedding demension with C-C
%Method,which proved by H.S.Kim
%skyhawk&flyinghawk
% %****************调试程序段****************************
% clear all;
% data=load('C:\Documents and Settings\Administrator\桌面\a.txt');% 载入数据
% %************************************************

N=length(data);
max_d=20;%the maximum value of the time delay

sigma=std(data);%calcute standard deviation s_d

for t=1:max_d
    t
    s_t=0;
    delt_s_s=0;
    for m=2:5
      s_t1=0;
      for j=1:4
            r=sigma*j/2;
            data_d=disjoint(data,N,t);%将时间序列分解成t个不相交的时间序列
            =size(data_d);
            s_t3=0;
            for i=1:t
                i
                Y=data_d(i,:);
                C_1(i)=correlation_integral(Y,N_d,r);%计算C(1,N_d,r,t)
                X=reconstitution(Y,N_d,m,t);%相空间重构
                N_r=N_d-(m-1)*t;
                C_I(i)=correlation_integral(X,N_r,r);%计算C(m,N_r,r,t)
                s_t3=s_t3+(C_I(i)-C_1(i)^m);%对t个不相关的时间序列求和
            end
            s_t2(j)=s_t3/t;
            s_t1=s_t1+s_t2(j);%对rj求和
      end
      delt_s_m(m)=max(s_t2)-min(s_t2);%求delt S(m,t)
      delt_s_s=delt_s_s+delt_s_m(m);%delt S(m,t)对m求和
      s_t0(m)=s_t1;
      s_t=s_t+s_t0(m);%S对m求和
    end
    s(t)=s_t/16;
    delt_s(t)=delt_s_s/4;
    s_cor(t)=delt_s(t)+abs(s(t));
   
end
fid=fopen('result.txt','w');
fprintf(fid,'%f %f %f %f/n',t,s(t),delt_s(t),s_cor(t));
fclose(fid);
t=1:max_d;
plot(t,s,t,delt_s,'.',t,s_cor,'*')
      
            
我的数据是:data=
时间延迟应该为154

winterdij 发表于 2007-7-27 10:46

顺便问一下
function =C_CMethod(data)
中的s   delt_s   s_cor都代表什么含义?谢谢了

咕噜噜 发表于 2007-7-27 11:03

disjoint?这是matlab自带的吗?我没见过,显示disjoint没有定义

octopussheng 发表于 2007-7-27 11:20

disjoint是一个自定义的函数,将原时间序列进行分离的,代码如下

function data_d=disjoint(data,N,t)
%the function is used to subdivid the time series into t disjoint time
%series.
%data:the time series
%N:the length of the time series
%t:the index lag
%skyhawk
for i=1:t
    for j=1:(N/t)
      data_d(i,j)=data(i+(j-1)*t);
    end
end

winterdij 发表于 2007-7-27 14:34

这个程序是Chaos Toolbox Ver.2.0工具箱里面的 disjoint在这个工具箱中有

octopussheng 发表于 2007-7-27 15:19

回复 #5 winterdij 的帖子

关于你最上面问的data如何赋值的问题,我想你接触matlab时间应该不长吧,其实很简单,用命令data=[],把你的数据点写进[]里面,每个数据间用空格符隔开,然后运行,放置到工作空间就可以了!

sssssxxxxx921 发表于 2007-7-27 17:05

C_1(i)=correlation_integral(Y,N_d,r);%计算C(1,N_d,r,t)

这句括号中怎么缺少一个参数   而且后边也有几句是这样的,   应该括号中添上t还是 i ?

另外时间延迟154反映在什么地方了   是不是应该在 t 上

octopussheng 发表于 2007-7-27 20:33

程序循环结束显示的t就是最佳延迟时间了

sssssxxxxx921 发表于 2007-7-27 21:46

你的意思就是说在max_d=154(楼主说的时间延迟)   
然后C_1(i)=correlation_integral(Y,N_d,r);%计算C(1,N_d,r,t)改变为

C_1(i)=correlation_integral(Y,N_d,r, i );%计算C(1,N_d,r,t)
这样说对不(i就是t的每一次循环)?

octopussheng 发表于 2007-7-28 09:11

回复 #9 sssssxxxxx921 的帖子

C_I(i)=correlation_integral(X,N_r,r);%计算C(m,N_r,r,t)

在这一行里面,确实缺少一个i,这个i就是表示t啊

上面的循环就是for i=1:t啊

这点应该是没有问题的

winterdij 发表于 2007-7-30 16:32

回复 #10 octopussheng 的帖子

首先谢谢你的回复,我加上数据data=;
运行后结果如下:
t =.....................................................................................................................................................................
i =

   1

Warning: Divide by zero.
(Type "warning off MATLAB:divideByZero" to suppress this warning.)
> In F:\专业研究\chaos\Chaos Toolbox Ver.2.0\Main\correlation_integral.m at line 19
In F:\专业研究\chaos\Chaos Toolbox Ver.2.0\Main\qwqw.m at line 33

i =

   2

Warning: Divide by zero.
(Type "warning off MATLAB:divideByZero" to suppress this warning.)
> In F:\专业研究\chaos\Chaos Toolbox Ver.2.0\Main\correlation_integral.m at line 19
In F:\专业研究\chaos\Chaos Toolbox Ver.2.0\Main\qwqw.m at line 33

i =

   1

Warning: Divide by zero.
(Type "warning off MATLAB:divideByZero" to suppress this warning.)
> In F:\专业研究\chaos\Chaos Toolbox Ver.2.0\Main\correlation_integral.m at line 19
In F:\专业研究\chaos\Chaos Toolbox Ver.2.0\Main\qwqw.m at line 33

i =

   2

Warning: Divide by zero.
(Type "warning off MATLAB:divideByZero" to suppress this warning.)
> In F:\专业研究\chaos\Chaos Toolbox Ver.2.0\Main\correlation_integral.m at line 19
In F:\专业研究\chaos\Chaos Toolbox Ver.2.0\Main\qwqw.m at line 33

i =

   1

Warning: Divide by zero.
(Type "warning off MATLAB:divideByZero" to suppress this warning.)
> In F:\专业研究\chaos\Chaos Toolbox Ver.2.0\Main\correlation_integral.m at line 19
In F:\专业研究\chaos\Chaos Toolbox Ver.2.0\Main\qwqw.m at line 33

i =

   2

Warning: Divide by zero.
(Type "warning off MATLAB:divideByZero" to suppress this warning.)
> In F:\专业研究\chaos\Chaos Toolbox Ver.2.0\Main\correlation_integral.m at line 19
In F:\专业研究\chaos\Chaos Toolbox Ver.2.0\Main\qwqw.m at line 33

i =

   1

Warning: Divide by zero.
(Type "warning off MATLAB:divideByZero" to suppress this warning.)
> In F:\专业研究\chaos\Chaos Toolbox Ver.2.0\Main\correlation_integral.m at line 19
In F:\专业研究\chaos\Chaos Toolbox Ver.2.0\Main\qwqw.m at line 33

i =

   2

Warning: Divide by zero.
(Type "warning off MATLAB:divideByZero" to suppress this warning.)
> In F:\专业研究\chaos\Chaos Toolbox Ver.2.0\Main\correlation_integral.m at line 19
In F:\专业研究\chaos\Chaos Toolbox Ver.2.0\Main\qwqw.m at line 33

i =

   1


??? One or more output arguments not assigned during call to 'reconstitution'.

Error in ==> F:\专业研究\chaos\Chaos Toolbox Ver.2.0\Main\qwqw.m
On line 31==>               X=reconstitution(Y,N_d,m,t);%相空间重构

这个reconstitution函数我的工具箱里有啊,
内容如下:function X=reconstitution(data,N,m,tau)
%该函数用来重构相空间
% m为嵌入空间维数
% tau为时间延迟
% data为输入时间序列
% N为时间序列长度
% X为输出,是m*n维矩阵

M=N-(m-1)*tau;%相空间中点的个数
for j=1:M         %相空间重构
    for i=1:m
      X(i,j)=data((i-1)*tau+j);
    end
end

但为什么会算不出来??
谢谢你了 我是刚学matlab 您多照顾了 :@L :@L

[ 本帖最后由 无水1324 于 2007-7-30 16:47 编辑 ]

winterdij 发表于 2007-7-30 16:33

是不是 数据量少的原因啊 ???

octopussheng 发表于 2007-7-30 20:51

不错,你的数据确实很少啊!

不过这可能只是一个原因,你先把数据量调大点试试,还有,最好把你的文件夹改成英文名称,中间不要有空格,把matlab中的文件命名这点好好看看书,呵呵!

winterdij 发表于 2007-7-30 23:09

回复 #13 octopussheng 的帖子

非常感谢你的帮助 加个QQ好吗? 我的26156847

octopussheng 发表于 2007-7-31 07:48

有问题可以直接在论坛问啊,我们三个版主一般都是每天在线的,随时待命,呵呵!这点你放心好了!
页: [1] 2
查看完整版本: cc方法的matlab程序怎么使用啊?