杭州锐达数字技术有限公司
查看: 7523|回复: 61

[分形与混沌] 求个互信息法求时延的matlab代码

[复制链接]
发表于 2013-11-28 15:21 | 显示全部楼层 |阅读模式

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

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

x
本人需用互信息法求一混沌时间序列的时延,在论坛上找了找,没找到代码,希望好心人分享一个能用的互信息法求时延的代码,谢谢了。

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

发表于 2014-2-25 21:02 | 显示全部楼层
楼主找到互信息法的代码了吗
 楼主| 发表于 2014-2-26 09:00 | 显示全部楼层
lc36978 发表于 2014-2-25 21:02
楼主找到互信息法的代码了吗

手上有一个,你试试,我有些参数设置不好。
  1. function [Tau,I_sq]=mutual_information(data,tau_max,n)
  2. %本函数是利用互信息法求时间序列的时间延迟Tau
  3. %data:待计算的时间序列
  4. %tau_max:最大时间延迟
  5. %n:等间隔小格子划分数
  6. I_sq=zeros(tau_max,1);
  7. N=length(data);  %时间序列的长度
  8. for tau=1:tau_max
  9.     s=data(1:N-tau);q=data(tau+1:N);  %把单变量时间序列扩充到二维相空间(s,q)上
  10.     as=min(s);bq=min(q);  %在重构的相图上取框,均匀划分成n*n个小格子
  11.     delts=(max(s)-as)/n;deltq=(max(q)-bq)/n;
  12.     N_sq=zeros(n);
  13.   
  14.     for ii=1:n           %计算位于格子(ii,jj)内的相点个数
  15.         for jj=1:n
  16.             for k=1:N-tau
  17.                 as_k=(s(k)-as)/delts; bq_k=(q(k)-bq)/deltq;
  18.                 if as_k>=ii-1&as_k<ii&bq_k>=jj-1&bq_k<jj                  
  19.                        N_sq(ii,jj)=N_sq(ii,jj)+1;   
  20.                 end
  21.             end
  22.         end
  23.     end
  24.     Ntotal=sum(sum(N_sq));
  25.     Ps=sum(N_sq)/Ntotal;   %计算位于一维s格子内的概率
  26.     Pq=sum(N_sq')/Ntotal;  %计算位于一维q格子内的概率
  27.     Psq=N_sq/Ntotal;       %计算位于二维格子(ii,jj)内概率
  28.    
  29.     H_s=0; %计算s的熵
  30.     H_q=0; %计算q的熵
  31.     for i=1:n
  32.         if Ps(i)~=0
  33.             H_s=H_s-Ps(i)*log(Ps(i));
  34.         elseif Pq(i)~=0
  35.             H_q=H_q-Pq(i)*log(Pq(i));
  36.         end
  37.     end
  38.    
  39.     H_sq=0;  %计算(s,q)的联合熵
  40.     for i=1:n
  41.         for j=1:n
  42.             if Psq(i,j)~=0
  43.                 H_sq=H_sq-Psq(i,j)*log(Psq(i,j));
  44.             end
  45.         end
  46.     end
  47.                
  48.     I_sq(tau)=H_s+H_q-H_sq;         %计算tau下的互信息函数
  49.     clear s q;     %清空变量s和q
  50. end
复制代码

点评

赞成: 5.0
赞成: 5
感觉很有用啊  发表于 2016-10-17 11:08
赞成: 5
  发表于 2016-9-15 18:53

评分

2

查看全部评分

发表于 2014-2-26 10:54 | 显示全部楼层
原来是小飞 发表于 2014-2-26 09:00
手上有一个,你试试,我有些参数设置不好。

除了陆振波就没有别人有写类似的程序了吗?
发表于 2014-2-26 11:00 | 显示全部楼层
陆振波只开源了自相关法和平均位移法求时延的代码,其它求嵌入维和lyapunov指数的都是封装的。。。。
 楼主| 发表于 2014-2-26 11:02 | 显示全部楼层
lc36978 发表于 2014-2-26 10:54
除了陆振波就没有别人有写类似的程序了吗?

那就没了。你也是做时间序列的吗
发表于 2014-2-26 11:25 | 显示全部楼层
原来是小飞 发表于 2014-2-26 11:02
那就没了。你也是做时间序列的吗

是啊,头都大了,你相空间重构的时候,tau和m分别用什么程序求的?
发表于 2014-2-26 12:04 | 显示全部楼层
原来是小飞 发表于 2014-2-26 09:00
手上有一个,你试试,我有些参数设置不好。

看了这个程序,有哪些参数设置有问题吗?好像运行速度挺慢的,还有点错误啊。。
 楼主| 发表于 2014-2-26 15:34 | 显示全部楼层
lc36978 发表于 2014-2-26 11:25
是啊,头都大了,你相空间重构的时候,tau和m分别用什么程序求的?

至今tau和m都求解不合适,特困惑。
发表于 2014-2-26 15:39 | 显示全部楼层
原来是小飞 发表于 2014-2-26 15:34
至今tau和m都求解不合适,特困惑。

求qq交流啊楼主
 楼主| 发表于 2014-2-26 15:48 | 显示全部楼层

企鹅:1051480255
发表于 2014-3-5 09:03 | 显示全部楼层
我这儿有两个互信息法求时延的程序
一个是武汉大学Adu的,另一个是陆振波的
希望对大家有所帮助,遗憾的是两个代码都没有公开核心代码的源程序

互信息法求tau.zip

2.49 KB, 下载次数: 102

售价: 5 点体能  [记录]

DelayTime_MutualInformation.zip

18.15 KB, 下载次数: 83

售价: 5 点体能  [记录]

评分

2

查看全部评分

回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2014-3-5 16:25 | 显示全部楼层
gghhjj 发表于 2014-3-5 09:03
我这儿有两个互信息法求时延的程序
一个是武汉大学Adu的,另一个是陆振波的
希望对大家有所帮助,遗憾的 ...

感谢您,我试试看。
发表于 2014-4-12 11:44 | 显示全部楼层
你好,请问一下 用互信息法求tau时,最大延迟升级max-tau是如何确定的呢
发表于 2014-4-16 09:18 | 显示全部楼层
eartha2013 发表于 2014-4-12 11:44
你好,请问一下 用互信息法求tau时,最大延迟升级max-tau是如何确定的呢

参考
http://forum.vibunion.com/thread-51237-1-1.html
http://forum.vibunion.com/thread-130472-1-1.html

评分

1

查看全部评分

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

本版积分规则

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