声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 6176|回复: 24

[分形与混沌] cc方法的matlab程序怎么使用啊?

[复制链接]
发表于 2007-7-27 10:44 | 显示全部楼层 |阅读模式

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

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

x
我在网上找到了下面这个程序 ,是cc方法计算时间延迟和嵌入维数的,但不知道怎么使用,不知道如何给“data”赋值,我用了很多方法给data赋值,但结果都是“1111”。不明白这到底是怎么回事,希望高手给我指明方向。谢谢了。:@L :@L :@L :@L
Chaos Toolbox Ver.2.0中的C_CMethod
原程序:
function [s,delt_s,s_cor]=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个不相交的时间序列
            [ll,N_d]=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=[0.2483 0.1337 0.0993 0.1648 0.2303 0.2967 0.3504 0.2319 0.1627 0.0941 0.0523 0.0469 0.0944 0.0698]
时间延迟应该为154
回复
分享到:

使用道具 举报

 楼主| 发表于 2007-7-27 10:46 | 显示全部楼层
顺便问一下
function [s,delt_s,s_cor]=C_CMethod(data)
中的  s     delt_s     s_cor  都代表什么含义?谢谢了
发表于 2007-7-27 11:03 | 显示全部楼层
disjoint?这是matlab自带的吗?我没见过,显示disjoint没有定义
发表于 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
 楼主| 发表于 2007-7-27 14:34 | 显示全部楼层
这个程序是Chaos Toolbox Ver.2.0工具箱里面的 disjoint在这个工具箱中有
发表于 2007-7-27 15:19 | 显示全部楼层

回复 #5 winterdij 的帖子

关于你最上面问的data如何赋值的问题,我想你接触matlab时间应该不长吧,其实很简单,用命令data=[],把你的数据点写进[]里面,每个数据间用空格符隔开,然后运行,放置到工作空间就可以了!
发表于 2007-7-27 17:05 | 显示全部楼层
C_1(i)=correlation_integral(Y,N_d,r);%计算C(1,N_d,r,t)

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

另外时间延迟154反映在什么地方了   是不是应该在 t 上
发表于 2007-7-27 20:33 | 显示全部楼层
程序循环结束显示的t就是最佳延迟时间了
发表于 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的每一次循环)?
发表于 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啊

这点应该是没有问题的
 楼主| 发表于 2007-7-30 16:32 | 显示全部楼层

回复 #10 octopussheng 的帖子

首先谢谢你的回复,我加上数据data=[0.2483 0.1337 0.0993 0.1648 0.2303 0.2967 0.3504 0.2319 0.1627 0.0941 0.0523 0.0469 0.0944 0.0698];
运行后结果如下:
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 编辑 ]
 楼主| 发表于 2007-7-30 16:33 | 显示全部楼层
是不是 数据量少的原因啊 ???
发表于 2007-7-30 20:51 | 显示全部楼层
不错,你的数据确实很少啊!

不过这可能只是一个原因,你先把数据量调大点试试,还有,最好把你的文件夹改成英文名称,中间不要有空格,把matlab中的文件命名这点好好看看书,呵呵!
 楼主| 发表于 2007-7-30 23:09 | 显示全部楼层

回复 #13 octopussheng 的帖子

非常感谢你的帮助 加个QQ好吗? 我的26156847
发表于 2007-7-31 07:48 | 显示全部楼层
有问题可以直接在论坛问啊,我们三个版主一般都是每天在线的,随时待命,呵呵!这点你放心好了!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-5-24 00:39 , Processed in 0.058906 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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