一、绘制二元信源的熵函数曲线
代码:
p = 0.00001:0.001:0.99999;
h = -p .* log2(p) - (1-p) .* log2(1-p);
plot(p,h);
title('二进制熵函数曲线');
xlabel('p')
ylabel('H(p,1-p)');
运行结果:
二、绘制三元信源的熵函数曲线
代码:
p=linspace(0.00001,0.99999,100);%也可以使用(eps, 1-eps, 100)eps代表极小值,避免0概率情况
q=linspace(0.00001,0.99999,100);
[P,Q]=meshgrid(p,q);
P_Q=P+Q;
%判断概率分布是否满足完备性
for n=1:100
for m=1:100
if P_Q(n,m)>=1
Q(n,m)=nan;
end
end
end
H = -P .* log2(P) - Q .* log2(Q) - (1-P-Q) .* log2(1-P-Q);
mesh(P, Q, H)
title('三元信源熵函数的图形')
运行结果:
三、计算任意数量符号信源的熵值
p = [0.1 0.2 0.3 0.4];%不同信源可对p进行修改得到不同结果
H = 0;
if sum(p)~=1
error('不满足概率完备性,请检查信源分布');
else
L = length(p);
fprintf('L = %d\n', L);
end
for i = 1:L
H = H - p(i) .* log2(p(i));
end
fprintf('H = %.3f\n', H);
运行结果: