2016-05-27 8 views
0

のエントロピー推定にヘルプ私は離散化バージョン(0/1)である確率変数のエントロピーを計算したいMatlab : Plot of entropy vs digitized code lengthMatlabの:この質問は、前のものに継続しているdisretized時系列

を尋ねたの連続ランダム変数x。確率変数は、Tent Mapと呼ばれる非線形力学系の状態を示す。テントマップを反復すると、長さNの時系列が得られます。

離散化された時系列のエントロピーが動的システムのエントロピーに等しくなるとコードは終了します。理論的には、システムのエントロピーはlog_2(2)であることが知られている。コードは終了しますが、エントロピー配列のfrst 3の値は誤りです - entropy(1) = 1, entropy(2) = NaN and entropy(3) = NaN。私はなぜこれが起こっているのか、どうやってそれを取り除くことができるのか、頭を悩ましています。コードの修正にお役立てください。ありがとうございました。

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) 
+0

こんにちは。回答が入った後で、あなたの質問を削除したり、実質的に変更したり、破壊したりしないでください。あなたの最後の編集の目的がわかりません。それをロールバックした。 – halfer

答えて

1

確率がゼロであるようです。その場合、0*log(0) = 0*-Inf = NaNを計算しようとしています。この場合、エントロピーはゼロでなければならないので、この条件を明示的にチェックするだけで済みます。

カップルサイドノート:あなたはH=log(2)と宣言しているようですが、あなたの投稿はエントロピーがlog_2(2)だと言っています。 p_0は常に1 - p_1であるため、すべてを数える必要はありません。 MATLABは各ステップで内容全体を再コピーする必要があるため、配列を動的に拡張することは非効率的です。あらかじめ割り当てておくことでスピードアップできます(多くのタイムステップを実行する場合にのみ価値があります)。

+0

ご返信ありがとうございます。私はシステムのエントロピーであるので、H = log(2)と宣言しています。私は、時系列のエントロピー(エントロピー変数で除算)= Hであるとき、バイアリ時系列のエントロピーをプログラム終了しないと計算する。H = log(2)は対数2(2)に等しくないか?また、ゼロ確率を持たない方法がありますか?文字列は0と1であるので、どのように確率がゼロになるのだろうかと思います。 – SKM

+1

ループを通した最初の反復の後、 's'は単一のものまたは単一のゼロのいずれかを含みます。したがって、他の値の確率はゼロになります。しかし、大きな問題ではありません。if文を使ってチェックし、エントロピーをゼロに設定してください。 – user20160