3QMM 发表于 2008-3-4 10:43

CC算法中分解子序列的疑惑

算法中有一个子程序data_d=disjoint(data,N,t),将时间序列分解成t个不相交的子序列
data_d=disjoint(data,N,t)
for i=1:t;
   for j=1:(N/t);
      data_d(i,j)=data(i+(j-1)*t);
   end
end
问题一:
这些子序列的点的个数是不是一定要相等?
如:x1,x4,x7,x10,x13,x16
       x2,x5,x8,x11,x14
       x3,x6,x9,x12,x15
这样可以嘛?
问题2:
按程序中for j=1:N/t,就要求系列数N必须是t的整数倍(在循环中这是不可能了),否则就会丢掉原时间序列中的一些点,从而使后面重构的相空间少点。
如:N=16,m=2,t=3
按上述程序分解的子序列为:
               x1,x4,x7,x10,x13
               x2,x5,x8,x11,x14
               x3,x6,x9,x12,x15
按上述子序列重构的相空间为:
(x1,x4),(x4,x7),(x7,x10),(x10,x13),(x2,x5),(x5,x8),(x8,x11),(x11,x14),(x3,x6),(x6,x9),(x9,x12),(x12,x15)
而实际重构的相空间应该为:
(x1,x4),(x4,x7),(x7,x10),(x10,x13),(x13,x16),(x2,x5),(x5,x8),(x8,x11),(x11,x14),(x3,x6),(x6,x9),(x9,x12),(x12,x15)
如果上面我说的相空间是对的话,那用子程序disjoint就会出错,那还不如不用直接对原时间序列进行重构就可以了,干嘛还要多此一举?难道用这个子程序有什么优化算法的作用?
论坛中好像出现过这样的一个帖子,但好像都没有正面回答
还望各位版主和高手赐教,在此万分感激。

octopussheng 发表于 2008-3-4 18:47

第一个问题:
         子序列的点的个数不一定要相等,只需要满足disjioint的条件即可!

第二个问题:
         时间序列分析的基础是Takens定理,要求对序列进行相空间重构,这样分析可以提高精度和效率。

大家一起补充回答他的问题吧!

3QMM 发表于 2008-3-4 19:48

回复 2楼 的帖子

先谢谢你的回答。
子序列的点数可以不等的话,那disjoint这个子程序就是错误的,需要补充。
另外,我知道要进行相空间重构,我的意思是,先前就不要将原序列分t个子序列,只要直接在
原序列基础上进行相空间重构就可以了。

octopussheng 发表于 2008-3-5 08:05

这个问题应该是可行的,我看Takens定理就是直接对原序列进行相空间重构的!

xwinder 发表于 2008-3-26 09:35

我对楼主的问题也是一头雾水呢:@L ,如果N可以不是t的整数倍,那重构后的点坐标怎么和原序列相对应呢:@Q
页: [1]
查看完整版本: CC算法中分解子序列的疑惑