cc方法的matlab程序怎么使用啊?
我在网上找到了下面这个程序 ,是cc方法计算时间延迟和嵌入维数的,但不知道怎么使用,不知道如何给“data”赋值,我用了很多方法给data赋值,但结果都是“1111”。不明白这到底是怎么回事,希望高手给我指明方向。谢谢了。:@L :@L :@L :@LChaos 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 顺便问一下
function =C_CMethod(data)
中的s delt_s s_cor都代表什么含义?谢谢了 disjoint?这是matlab自带的吗?我没见过,显示disjoint没有定义 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 这个程序是Chaos Toolbox Ver.2.0工具箱里面的 disjoint在这个工具箱中有
回复 #5 winterdij 的帖子
关于你最上面问的data如何赋值的问题,我想你接触matlab时间应该不长吧,其实很简单,用命令data=[],把你的数据点写进[]里面,每个数据间用空格符隔开,然后运行,放置到工作空间就可以了! C_1(i)=correlation_integral(Y,N_d,r);%计算C(1,N_d,r,t)这句括号中怎么缺少一个参数 而且后边也有几句是这样的, 应该括号中添上t还是 i ?
另外时间延迟154反映在什么地方了 是不是应该在 t 上 程序循环结束显示的t就是最佳延迟时间了 你的意思就是说在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的每一次循环)?
回复 #9 sssssxxxxx921 的帖子
C_I(i)=correlation_integral(X,N_r,r);%计算C(m,N_r,r,t)在这一行里面,确实缺少一个i,这个i就是表示t啊
上面的循环就是for i=1:t啊
这点应该是没有问题的
回复 #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 编辑 ] 是不是 数据量少的原因啊 ??? 不错,你的数据确实很少啊!
不过这可能只是一个原因,你先把数据量调大点试试,还有,最好把你的文件夹改成英文名称,中间不要有空格,把matlab中的文件命名这点好好看看书,呵呵!
回复 #13 octopussheng 的帖子
非常感谢你的帮助 加个QQ好吗? 我的26156847 有问题可以直接在论坛问啊,我们三个版主一般都是每天在线的,随时待命,呵呵!这点你放心好了!
页:
[1]
2