声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2421|回复: 4

[编程技巧] 相空间重构的赋值方法

[复制链接]
发表于 2007-9-6 14:03 | 显示全部楼层 |阅读模式

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

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

x
非线性研究中,一般都涉及到相空间重构,我现在在做的就是一个嵌入式的重构。
具体是这样的:
分析对象是一维时间序列{x1,x2,x3,...,xN},需要将其进行时迟排列建立相空间:
      x1    x2      ...     xi+1   ...   xN-M+1
      x2    x3      ...     xi+2   ...   xN-M+2
X=  ...     ...       ...       ...       ...        ...
      xM   xM+1  ...     xi+M   ...      xN
其中M是自己选定的,称为窗口长度或者嵌入维数。

由于实验室的机器CPU比较古旧,运算速度实在让人伤心,所以只有在优化程序上面下点工夫,我下面提出两种想法,抛砖引玉,请大家共同讨论。

第一种方法:
完全按照定义:
for i=1:M,  xx(i,:)=x(i:(i+N-1)); end
然而众所周知,MATLAB的的弱点恰恰就是循环,能不用还是不用的好。

第二种方法:
x=repmat(x, M, 1); xx=full(spdiags(x, M-N: M+1, N-M+1, M)); xx=rot90(xx, -1);

第二种方法,是应用了MATLAB的矩阵功能,但这里就出现了个问题,就是似乎第二种方法运行起来还不如第一种快,我用MATLAB自带的profiler验证了一下,确实是要慢上很多。
想想也是,我不但先把序列重复了M遍,又赋了个稀疏阵,又做了个旋转……
不过这至少是个想法,不知各位版友有没有更好的想法?

[ 本帖最后由 ChaChing 于 2010-7-5 20:48 编辑 ]

评分

1

查看全部评分

回复
分享到:

使用道具 举报

发表于 2007-9-6 14:27 | 显示全部楼层
在调用MATLAB自带函数时并非就没有用到循环

自己定义的循环也未必就比用自带函数差呀

评分

1

查看全部评分

 楼主| 发表于 2007-9-6 14:39 | 显示全部楼层
谢谢lxq,试验的结果确实说明了这个问题。
发表于 2008-3-17 17:11 | 显示全部楼层
看完你写的,我终于搞明白,相空间重构是个什么东东了!谢谢
发表于 2010-7-5 10:34 | 显示全部楼层

学习了

你写的进一步加深了我对相空间的理解
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-28 09:55 , Processed in 0.093830 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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