声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2301|回复: 3

[分形与混沌] Kim的C-C法源代码-个人

[复制链接]
发表于 2015-5-27 00:20 | 显示全部楼层 |阅读模式

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

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

x




  1. %**************************************************************************
  2. %               子函数功能:利用C-C法求延迟时间tau和时间窗口tw
  3. %程序原理说明:  1.吕金虎—混沌时间序列分析及其应用—P67-69
  4. %           创作者:何&*(桂林电子科技大学)        QQ:458689834
  5. %           时间: 2015-5-26-00:00:00                 
  6. %I/O口说明:
  7. %       data:       输入时间序列
  8. %       max_lag:    最大时间延迟
  9. %       tau:        计算得到的延迟时间
  10. %       tw:         时间窗口
  11. %**************************************************************************
  12. function [tau,tw]=C_CMethod_he(data,max_lag)

  13. M=5;                                                                       %嵌入最大维数,可认为修改!
  14. R=4;                                                                       %最大半径搜索点!
  15. sigma=std(data);                                                           %时间序列标准差!

  16. S_mean1=zeros(M-1,max_lag);                                                %P69页公式3.31,式子右侧j从1到4(R)的和!
  17. S_mean2=zeros(1,max_lag);                                                  %P69页公式3.31的左边(j和m取完值的和)!
  18. S_delta=zeros(M-1,max_lag);                                                %P69页公式3.32右侧的三角形S(m,t)!
  19. S_delta_mean=zeros(1,max_lag);                                             %对S_delta求均值,公式3.32的左侧标识符!
  20. S_cor=zeros(1,max_lag);                                                    %P69(3.33)!

  21. for t=1:max_lag
  22.     t
  23.     Y=Disjoint(data,t);                                                    %将原始序列分成t个不相交的序列(P68公式3.27的代码)!
  24.     [m0,n0]=size(Y);                                                       %m0其实在这里没有用,但是n0其实等于t的值!
  25.     L1=floor(length(data)/t);                                              %t个不相交序列的长度(向下取整)!
  26.     for m=2:M                                                              %嵌入维数循环!
  27.         B1=[];                                                             %B1用于存储P69页公式3.30右侧大括号内的S(m,rj,t),当m和t固定时,B1是一行数据,所以可以求出最大值和最小值!
  28.         for r=1:R                                                          %半径循环开始!
  29.             ri=sigma*r/2;                                                  %P69页公式3.31上面那行文字和数字的代码!
  30.             A1=0;                                                          %A1用于存储P68页公式3.28中右侧中括号内的差值(该差值有t个)!
  31.             for t1=1:n0                                                    %分别对不同不相交序列进行求解关联积分值!
  32.                 Y1=Y(:,t1);                                                %取出第t1个不相交的时间序列!
  33.                 X1=Reconstitution(Y1,1,t);                                 %对其进行嵌入维数为1,时间延迟为t的相空间重构!
  34.                 C_sm1rt=Correlation_integral(X1,L1,ri);                    %调用关联积分子函数求公式3.28中括号-号后面的值!
  35.                
  36.                 X2=Reconstitution(Y1,m,t);                                 %对其进行嵌入维数为m,时间延迟为t的相空间重构!
  37.                 L2=L1-(m-1)*t;                                             %重构后相空间中相点的个数!
  38.                 C_smrt=Correlation_integral(X2,L2,ri);                     %调用关联积分子函数求公式3.28中括号-号前面式子的值!
  39.                 A1=A1+ C_smrt-C_sm1rt^m;                                   %两个关联积分值做差!
  40.             end
  41.             B1=[B1 A1/t];                                                  %r循环一圈得到3.29左边的值,这里S(m,r,t)中r变量可以消除,得到二维(m,t)矩阵,因为r被遍历了!
  42.         end
  43.         S_delta(m-1,t)=max(B1)-min(B1);                                    %因为m从2开始,所以m-1;然后该式子得到3.30左边的值!一一对应!
  44.         S_mean1(m-1,t)=sum(B1);                                            %P69页公式3.31,式子右侧j从1到4(R)的和!  
  45.     end
  46.     S_mean2(t)=sum(S_mean1(:,t))/(M-1)/R;                                  %公式3.31的值!M=5,R=4!
  47.     S_delta_mean(t)=sum(S_delta(:,t))/(M-1)                                %公式3.32的值!
  48.     S_cor(t)=S_delta_mean(t)+abs(S_mean2(t));                              %公式3.33的值!
  49. end
  50. figure
  51. plot(S_mean2,'r');hold on;
  52. plot(S_delta_mean,'b');hold on;
  53. plot(S_cor,'k-');legend('S_mean2','S_delta_mean','S_cor');grid on;         %做出三条曲线!               
  54. %--------------------------------------------------------------------------                    
  55. %           从三个统计指标中取出时间延迟—tau和时间窗宽度—tw                  
  56. %--------------------------------------------------------------------------                        
  57. tw=min(S_cor);                                                             %公式3.33下面的话!

  58. for t=2:max_lag
  59.     if  S_mean(t-1)*S_mean(t)<0
  60.         tau=t;
  61.     end
  62. end
  63. %--------------------------------------------------------------------------
  64. %若您发现有问题或不懂地方,请及时通知本人,发生邮件或加QQ都行!
复制代码



评分

1

查看全部评分

回复
分享到:

使用道具 举报

 楼主| 发表于 2015-5-27 00:22 | 显示全部楼层
配套程序请在CSDN网站搜索:混沌时间序列预测中的C-C法源代码

程序能运行,但是结果不对,希望大家能改改

点评

这个最好能够配上相关的实例 至于程序是否正确不好说  详情 回复 发表于 2015-10-5 16:15
发表于 2015-8-11 15:10 | 显示全部楼层
发表于 2015-10-5 16:15 | 显示全部楼层
本帖最后由 Vickyvictoria 于 2015-10-5 16:16 编辑
cwhe_10 发表于 2015-5-27 00:22
配套程序请在CSDN网站搜索:混沌时间序列预测中的C-C法源代码

程序能运行,但是结果不对,希望大家能改 ...

这个最好能够配上相关的实例
至于程序是否正确不好说,因为没有实例不排除用法及其他方面的一些因素导致的
另外直接去修改这样的一个程序不如直接自己写一个,毕竟每个人编程的思路是不一样的

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-12-23 11:35 , Processed in 0.058359 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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