エラー発生について

5 views (last 30 days)
sz
sz on 28 Oct 2021
Edited: Atsushi Ueno on 28 Oct 2021
A = [0.15 0.14 0 0.1 0.19 0.1 0.23 0.09];
SCE = sum(-1.*A.*log2(A))
SCE = NaN
このような計算をするとSCE部分がNaNというのが出てきてエラーになってしまいます。
Aの合計を1にするようにしていて
A = [0.15 0.14 0.1 0.1 0.19 0.1 0.13 0.09];
SCE = sum(-1.*A.*log2(A))
SCE = 2.9548
にすると普通に計算出来るのでAに0があるとエラーが出るのだと思うのですが、
どのようにすればエラーが起きず普通に計算出来るかが分からない為、教えていただきたいです。

Accepted Answer

Hernia Baby
Hernia Baby on 28 Oct 2021
-1*0*log2(0)が不定形のため、NaNが返されます。
-1*0*log2(0)
ans = NaN
そして sum 関数ではNaNが入るとNaNで返してしまいます。
オプションでNaNがある部分を無視する方法が解決案として挙げられます。
A=[0.15, 0.14, 0, 0.1, 0.19, 0.1, 0.23, 0.09]
A = 1×8
0.1500 0.1400 0 0.1000 0.1900 0.1000 0.2300 0.0900
SCE = sum(-1.*A.*log2(A))
SCE = NaN
SCE1 = sum(-1.*A.*log2(A),'omitnan')
SCE1 = 2.7276

More Answers (0)

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!