首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab :在离散时间序列熵估计中的帮助

Matlab :在离散时间序列熵估计中的帮助
EN

Stack Overflow用户
提问于 2016-05-27 03:11:45
回答 1查看 243关注 0票数 0

这个问题是对Matlab :熵与数字化码长的关系图上一个问题的延续。

我想计算一个随机变量的熵,它是连续随机变量x的离散版本(0/1)。随机变量表示称为帐篷地图的非线性动力系统的状态。Tent映射的迭代得到了长度N的时间序列。

当离散化时间序列的熵与动力系统的熵相等时,码应立即退出。理论上已知该系统的熵为log_2(2)。代码退出,但是熵数组的frst 3值是错误的- entropy(1) = 1, entropy(2) = NaN and entropy(3) = NaN。我绞尽脑汁想知道为什么会发生这种事,以及如何摆脱它。请帮助纠正代码。谢谢。

代码语言:javascript
复制
clear all


H = log(2)

threshold = 0.5;
x(1) = rand;
lambda(1) = 1;
entropy(1,1) = 1;
j=2;
tol=0.01;
while(~(abs(lambda-H)<tol))



    if x(j - 1) < 0.5        
        x(j) = 2 * x(j - 1);                        
    else  
        x(j) = 2 * (1 - x(j - 1));                    
    end



s = (x>=threshold); 
p_1 = sum(s==1)/length(s);
p_0 = sum(s==0)/length(s);
entropy(:,j) = -p_1*log2(p_1)-(1-p_1)*log2(1-p_1);
lambda = entropy(:,j);
j = j+1;
end
plot( entropy )
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-27 04:15:18

看来你的一个概率是零。在这种情况下,您将试图计算0*log(0) = 0*-Inf = NaN。在这种情况下,熵应该是零,所以您可以显式地检查这个条件。

几个边注:看起来你在声明H=log(2),但是你的帖子说熵是log_2(2)。p_0总是1 - p_1,所以您不必再计算每件事了。动态地增长数组效率很低,因为matlab必须在每一步重新复制整个内容。您可以通过预先分配它们来加快速度(只有当您要运行多个时间步骤时才值得)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37474242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档