声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2925|回复: 13

[分形与混沌] 互信息法求时间延迟的问题

[复制链接]
发表于 2014-4-15 16:57 | 显示全部楼层 |阅读模式

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

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

x
本人在论坛上搜到了一个互信息法求时延的代码,可是结果却与‘tau_max’的取值相同,即tau_max的取值就是最后的时延值,这明显是不对的。估计是代码出了问题,可能代码不全,请好心人帮忙看下代码能否补全或者传个完整的代码给我,谢了。代码如下:
  1. data=load('11yue(2880x1).txt');
  2. tau_max=5;
  3. n=128;
  4. I_sq=zeros(tau_max,1);
  5. N=length(data);  %时间序列的长度
  6. for tau=1:tau_max
  7.     s=data(1:N-tau);q=data(tau+1:N);  %把单变量时间序列扩充到二维相空间(s,q)上
  8.     as=min(s);bq=min(q);  %在重构的相图上取框,均匀划分成n*n个小格子
  9.     delts=(max(s)-as)/n;deltq=(max(q)-bq)/n;
  10.     N_sq=zeros(n);
  11.   
  12.     for ii=1:n           %计算位于格子(ii,jj)内的相点个数
  13.         for jj=1:n
  14.             for k=1:N-tau
  15.                 as_k=(s(k)-as)/delts; bq_k=(q(k)-bq)/deltq;
  16.                 if as_k>=ii-1&as_k<ii&bq_k>=jj-1&bq_k<jj                  
  17.                        N_sq(ii,jj)=N_sq(ii,jj)+1;   
  18.                 end
  19.             end
  20.         end
  21.     end
  22.     Ntotal=sum(sum(N_sq));
  23.     Ps=sum(N_sq)/Ntotal;   %计算位于一维s格子内的概率
  24.     Pq=sum(N_sq')/Ntotal;  %计算位于一维q格子内的概率
  25.     Psq=N_sq/Ntotal;       %计算位于二维格子(ii,jj)内概率
  26.    
  27.     H_s=0; %计算s的熵
  28.     H_q=0; %计算q的熵
  29.     for i=1:n
  30.         if Ps(i)~=0
  31.             H_s=H_s-Ps(i)*log(Ps(i));
  32.         elseif Pq(i)~=0
  33.             H_q=H_q-Pq(i)*log(Pq(i));
  34.         end
  35.     end
  36.    
  37.     H_sq=0;  %计算(s,q)的联合熵
  38.     for i=1:n
  39.         for j=1:n
  40.             if Psq(i,j)~=0
  41.                 H_sq=H_sq-Psq(i,j)*log(Psq(i,j));
  42.             end
  43.         end
  44.     end
  45.                
  46.     I_sq(tau)=H_s+H_q-H_sq;         %计算tau下的互信息函数
  47.     clear s q;     %清空变量s和q
  48. end
复制代码


回复
分享到:

使用道具 举报

发表于 2014-4-16 10:46 | 显示全部楼层
尝试增大tau_max看看结果
 楼主| 发表于 2014-4-16 10:51 | 显示全部楼层
gghhjj 发表于 2014-4-16 10:46
尝试增大tau_max看看结果

增大为40,100。结果还是和tau_max的值相同。
发表于 2014-4-18 08:40 | 显示全部楼层
原来是小飞 发表于 2014-4-16 10:51
增大为40,100。结果还是和tau_max的值相同。

程序上看应该问题不大,会不会是数据问题?你找个组简单的数据验证一下
 楼主| 发表于 2014-4-18 09:06 | 显示全部楼层
gghhjj 发表于 2014-4-18 08:40
程序上看应该问题不大,会不会是数据问题?你找个组简单的数据验证一下

恩,我试下
 楼主| 发表于 2014-4-18 09:34 | 显示全部楼层
gghhjj 发表于 2014-4-18 08:40
程序上看应该问题不大,会不会是数据问题?你找个组简单的数据验证一下

又换了2组数据试试,结果还是一样,应该是程序的问题吧
发表于 2014-5-16 16:50 | 显示全部楼层
原来是小飞 发表于 2014-4-18 09:34
又换了2组数据试试,结果还是一样,应该是程序的问题吧

是简单系统的吗?比如 Lorenz 系统的仿真结果一类的?
发表于 2014-10-26 20:25 | 显示全部楼层
楼主,找到毛病所在了吗?求指导啊
发表于 2014-11-14 16:00 | 显示全部楼层
楼主,找到毛病所在了吗?求指导啊
http://forum.vibunion.com/forum. ... mp;page=1#pid749235看这个帖子,gghhjj分享的程序可以用
发表于 2015-5-30 20:50 | 显示全部楼层
wystar 发表于 2014-11-14 16:00
http://forum.vibunion.com/forum.php?mod=viewthread&tid=129845&page=1#pid749235看这个帖子,gghhjj分享 ...

你好,我也下载了gghhjj分享的程序,可是里面是带有dll文件的啊,这应该是混合编程产生的,要如何调用?多谢
发表于 2015-5-30 21:26 | 显示全部楼层
楼主你没发现你这个程序内有一个明显的比较搞笑的错误吗?你的输出变量 tau 在tau=1:tau_max中作了一次循环变量,循环结束后肯定就等于tau_max了啊!最关键的是你后面没有对tau进行操作,那结果肯定等于tau_max了。建议程序最后加一个plot(I_sq),从输出的图像上找第一个极小值,对应的tau就是我们需要的值。另外,经试验,程序主体部分可以完美运行,运行结果应该是正确的,多谢楼主分享出来!!!!

点评

sd
本人刚开始学习,请问,load的文件是什么形式的(数据形式),我只想简单的做一下试验,运行一下程序,谢谢指导  详情 回复 发表于 2016-6-2 09:20

评分

1

查看全部评分

发表于 2015-6-23 11:02 | 显示全部楼层
你好,我也下载了gghhjj分享的程序,可是里面是带有dll文件的啊,这应该是混合编程产生的,要如何调用?多谢
不好意思,回复的有点晚。你将自己的数据嵌入到主程序中调用就可以哦
捕获.PNG
发表于 2016-6-1 20:09 | 显示全部楼层
wystar 发表于 2015-6-23 11:02
不好意思,回复的有点晚。你将自己的数据嵌入到主程序中调用就可以哦

请问mutual.dll文件如何调用啊,嵌入数据也不行,提示mutual没有定义
发表于 2016-6-2 09:20 | 显示全部楼层
窃以为洒脱 发表于 2015-5-30 21:26
楼主你没发现你这个程序内有一个明显的比较搞笑的错误吗?你的输出变量 tau 在tau=1:tau_max中作了一次循 ...

本人刚开始学习,请问,load的文件是什么形式的(数据形式),我只想简单的做一下试验,运行一下程序,谢谢指导
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-12-28 13:34 , Processed in 0.090665 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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