已知二阶马尔可夫信源的转移矩阵:
#| 0.8 0.2 0 0 |
#| 0 0 0.5 0.5 |
#| 0.5 0.5 0 0 |
#| 0 0 0.2 0.8 |
#-1、计算二阶马尔可夫信源的极限概率分布:
#-2、计算该二阶马尔可夫信源信源的熵
#—已知二阶马尔可夫信源的转移矩阵:
#| 0.8 0.2 0 0 |
#| 0 0 0.5 0.5 |
#| 0.5 0.5 0 0 |
#| 0 0 0.2 0.8 |
#-1、计算二阶马尔可夫信源的极限概率分布:
#-2、计算该二阶马尔可夫信源信源的熵.
print("----------计算二阶马尔可夫信源的熵--------------")
import numpy as np
from sympy import *
from fractions import Fraction # 小数变分数库
m=0
def judge(list1):
global m
result=0
for i in range(2):
if 0<= list1[i] <=1:
#print("P(a%d)符合概率分布条件"%(i+1))
result +=list1[i]
else:
print("P(a%d)不符合概率分布条件"%(i+1))
if result ==1:
m=1
#print("全部的概率和为1,符合条件。")
else :
print("请输入符合概率分布的数值!")
def entropy(judge,x,y):
b=[]
b.append(x)
b.append(y)
judge(b)
if m==1:
result=0
for i in range(2):
result -= b[i]*np.log2(b[i])
return float("{0:.4f}".format(result))
else: return print("程序结束,请重新输入调用函数!")
def markov(entropy): #马尔可夫
a=np.array([[0.8,0.2,0,0],[0,0,0.5,0.5],[0.5,0.5,0,0],[0,0,0.2,0.8]])
x,y,z,m=symbols("x y z m")
eq=[a[0,0]*x+a[2,0]*z-x,
a[0,1]*x+a[2,1]*z-y,
a[1,2]*y+a[3,2]*m-z,
a[3,3]*m+a[1,3]*y-m,
x+y+z+m-1 ]
result=solve(eq,[x,y,z,m])
x=float(result[x])
y=float(result.get(y))
z=float(result.get(z))
m=float(result.get(m))
markov_entropy=x*entropy(judge,0.8,0.2)+y*entropy(judge,0.5,0.5)+z*entropy(judge,0.5,0.5)+m*entropy(judge,0.8,0.2)
print("二阶马尔可夫信源信源的熵:%.2f (比特/符号)"%(markov_entropy))
print("二阶马尔可夫信源的极限概率分布:Q(E1)=%.4f Q(E2)=%.4f Q(E3)=%.4f Q(E4)=%.4f"%(x,y,z,m))
markov(entropy)