互信息法求时间延迟的问题
本人在论坛上搜到了一个互信息法求时延的代码,可是结果却与‘tau_max’的取值相同,即tau_max的取值就是最后的时延值,这明显是不对的。估计是代码出了问题,可能代码不全,请好心人帮忙看下代码能否补全或者传个完整的代码给我,谢了。代码如下:data=load('11yue(2880x1).txt');tau_max=5;
n=128;
I_sq=zeros(tau_max,1);
N=length(data);%时间序列的长度
for tau=1:tau_max
s=data(1:N-tau);q=data(tau+1:N);%把单变量时间序列扩充到二维相空间(s,q)上
as=min(s);bq=min(q);%在重构的相图上取框,均匀划分成n*n个小格子
delts=(max(s)-as)/n;deltq=(max(q)-bq)/n;
N_sq=zeros(n);
for ii=1:n %计算位于格子(ii,jj)内的相点个数
for jj=1:n
for k=1:N-tau
as_k=(s(k)-as)/delts; bq_k=(q(k)-bq)/deltq;
if as_k>=ii-1&as_k<ii&bq_k>=jj-1&bq_k<jj
N_sq(ii,jj)=N_sq(ii,jj)+1;
end
end
end
end
Ntotal=sum(sum(N_sq));
Ps=sum(N_sq)/Ntotal; %计算位于一维s格子内的概率
Pq=sum(N_sq')/Ntotal;%计算位于一维q格子内的概率
Psq=N_sq/Ntotal; %计算位于二维格子(ii,jj)内概率
H_s=0; %计算s的熵
H_q=0; %计算q的熵
for i=1:n
if Ps(i)~=0
H_s=H_s-Ps(i)*log(Ps(i));
elseif Pq(i)~=0
H_q=H_q-Pq(i)*log(Pq(i));
end
end
H_sq=0;%计算(s,q)的联合熵
for i=1:n
for j=1:n
if Psq(i,j)~=0
H_sq=H_sq-Psq(i,j)*log(Psq(i,j));
end
end
end
I_sq(tau)=H_s+H_q-H_sq; %计算tau下的互信息函数
clear s q; %清空变量s和q
end
尝试增大tau_max看看结果 gghhjj 发表于 2014-4-16 10:46
尝试增大tau_max看看结果
增大为40,100。结果还是和tau_max的值相同。 原来是小飞 发表于 2014-4-16 10:51
增大为40,100。结果还是和tau_max的值相同。
程序上看应该问题不大,会不会是数据问题?你找个组简单的数据验证一下 gghhjj 发表于 2014-4-18 08:40
程序上看应该问题不大,会不会是数据问题?你找个组简单的数据验证一下
恩,我试下 gghhjj 发表于 2014-4-18 08:40
程序上看应该问题不大,会不会是数据问题?你找个组简单的数据验证一下
又换了2组数据试试,结果还是一样,应该是程序的问题吧 原来是小飞 发表于 2014-4-18 09:34
又换了2组数据试试,结果还是一样,应该是程序的问题吧
是简单系统的吗?比如 Lorenz 系统的仿真结果一类的? 楼主,找到毛病所在了吗?求指导啊 楼主,找到毛病所在了吗?求指导啊http://forum.vibunion.com/forum.php?mod=viewthread&tid=129845&page=1#pid749235看这个帖子,gghhjj分享的程序可以用 wystar 发表于 2014-11-14 16:00
http://forum.vibunion.com/forum.php?mod=viewthread&tid=129845&page=1#pid749235看这个帖子,gghhjj分享 ...
你好,我也下载了gghhjj分享的程序,可是里面是带有dll文件的啊,这应该是混合编程产生的,要如何调用?多谢 楼主你没发现你这个程序内有一个明显的比较搞笑的错误吗?你的输出变量 tau 在tau=1:tau_max中作了一次循环变量,循环结束后肯定就等于tau_max了啊!最关键的是你后面没有对tau进行操作,那结果肯定等于tau_max了。建议程序最后加一个plot(I_sq),从输出的图像上找第一个极小值,对应的tau就是我们需要的值。另外,经试验,程序主体部分可以完美运行,运行结果应该是正确的,多谢楼主分享出来!!!!
你好,我也下载了gghhjj分享的程序,可是里面是带有dll文件的啊,这应该是混合编程产生的,要如何调用?多谢不好意思,回复的有点晚。你将自己的数据嵌入到主程序中调用就可以哦 wystar 发表于 2015-6-23 11:02
不好意思,回复的有点晚。你将自己的数据嵌入到主程序中调用就可以哦
请问mutual.dll文件如何调用啊,嵌入数据也不行,提示mutual没有定义 窃以为洒脱 发表于 2015-5-30 21:26
楼主你没发现你这个程序内有一个明显的比较搞笑的错误吗?你的输出变量 tau 在tau=1:tau_max中作了一次循 ...
本人刚开始学习,请问,load的文件是什么形式的(数据形式),我只想简单的做一下试验,运行一下程序,谢谢指导
页:
[1]