1.編寫一個熵函數,並對輸入參數進行檢驗,使之滿足概率空間並處理函數計算log0時的Nan問題。
編寫的函數代碼如下:
function H= entropy(p)
%entropy 信息熵函數
%輸入信源的概率空間,輸出信息熵
if p>=0
if sum(p)==1
p(find(p==0))=1; %解決log0的Nan問題
H=sum(sum(-p.*log2(p)));
else
fprintf('不滿足概率表空間!\n');
end
else
fprintf('不滿足概率空間!\n');
end
end
測試代碼如下:
p=[1/2 1/8 1/8 1/8 1/8 0];
H=entropy(p)
fprintf('信源熵爲%g\n',H);
運行後結果如圖所示:
2.編寫二元信源熵H(w)隨w變化的曲線圖
代碼如下:
syms w Hw
XP=[0 1
w 1-w];
Hw=sum(-XP(2,:).*log2(XP(2,:)));
ezplot(w,Hw,[0,1]);xlabel('w'),ylabel('Hw');
title('H(w)隨w變化曲線圖');
曲線圖如下圖所示: