《IT实验-熵计算编程实验.doc》由会员分享,可在线阅读,更多相关《IT实验-熵计算编程实验.doc(7页珍藏版)》请在金锄头文库上搜索。
1、云南大学数学与与统计学院上机实践报告课程名称:信息论基础实验年级:2011级上机实践成绩:指导教师:陆正福姓名:凌建新上机实践名称:熵的计算编程实验学号:20111910101上机实践日期: 2014.3.12上机实践编号:No.2组号:第七组上机实践时间: 一、实验目的给定分布,计算熵;给定原始数据,计算熵二、实验内容1. 给定二维分布函数,计算联合熵、条件熵、互信息、各变量的熵。 可选择课本例题2.2.1作为程序测试用例。2. 自行设定原始数据(如一段文本、一幅图像、一个数据表等),按照频率计算符号的分布, 进而计算有关的熵。三、实验环境个人计算机,Java平台对于非信息与计算科学专业的学
2、生,可以选择任意编程平台四、实验记录与实验结果分析(注意记录实验中遇到的问题。实验报告的评分依据之一是实验记录的细致程度、实验过程的真实性、实验结果的解释和分析。如果涉及实验结果截屏,应选择白底黑字。)第一题:1.实验中需要用到的二维表 x y123411/81/161/321/3221/161/81/321/3231/161/161/161/1641/40002.实验代码public class Information public static void main(String args) double Hx = 0,Hy=0,Hxy=0,Hx_y=0,Hy_x=0;double Ixy=
3、0;double num2=new double4;double num3=new double4;double num = (double)1/8 , (double)1/16 , (double)1/32, (double)1/32,(double)1/16, (double)1/8 , (double)1/32 , (double)1/32 ,(double)1/16 , (double)1/16 , (double)1/16, (double)1/16,(double)1/4,(double)0.0,(double)0.0, (double)0.0 ; for(int i=0;inum
4、.length;i+) for(int j=0;jnumi.length;j+) System.out.print(numij + ); System.out.print(n); for(int i=0;inum.length;i+) for(int j=0;jnumi.length;j+) num2i= numj0+numj1+ numj2+numj3; Hy =Hy -(num2i * Math.log(num2i) / Math.log(2); / H = -Pi*log2(Pi) System.out.println(y的熵为:H(y)= + Hy); break; for(int i
5、=0;i4;i+) for(int j=0;j4;j+) num3i= num0j +num1j+ num2j+num3j; Hx =Hx -(num3i * Math.log(num3i) / Math.log(2); System.out.println(y的熵为:H(x)= + Hx); break; for(int i=0;i4;i+) for(int j=0;j4;j+)if(numij!=0) Hxy=Hxy-(numij )* (Math.log(numij) / Math.log(2);/ H = -Pi*log2(Pi) Hy_x=Hxy-Hx; Ixy=Hy-Hy_x; H
6、x_y=Hx-Ixy; System.out.println(联合熵为:H(xy)= +Hxy); System.out.println(条件熵:H(y|x)= +Hy_x); System.out.println(互信息为:I(xy)= +Ixy); System.out.println(条件熵:H(x|y)= +Hx_y); 3实验结果截图第二题:若输入大小写字母都存在的一段文本,计算其熵。1.实验中需要用到的文本a=abaaababbbababaa;b=abaaabbbabbbbbab;求a,b变量存在的概率;2.实验代码public class mation public static
7、 void main (String args)throws Exception double Hx = 0,Hy=0,Hxy=0,Hx_y=0,Hy_x=0;double Ixy=0;double num2=new double2;double num3=new double2;double a1 = 0,a2=0,b1=0,b2=0,c=0; String a=abaaababbbababaa, b=abaaabbbabbbbbab; char ch1=a.toCharArray(); char ch2=b.toCharArray(); double count1=0,count2=0,c
8、ount3=0,count4=0; for(int i=0;ich1.length;i+) if(ch1i=a) count1+; if(ch1i=b)count2+; for(int i=0;ich2.length;i+) if(ch2i=a) count3+; if(ch2i=b)count4+; c=count1+count2+count3+count4; a1=a1+count1/c; b1=b1+count2/c; a2=a2+count3/c; b2=b2+count4/c; System.out.println(a在a中出现的概率= +a1); System.out.printl
9、n(b在a中出现的概率= +b1); System.out.println(a在b中出现的概率= +a2); System.out.println(b在b中出现的概率= +b2); double num = (double)a1,(double)b1,(double)a2,(double)b2; for(int i=0;inum.length;i+) for(int j=0;jnumi.length;j+) System.out.print(numij + ); System.out.print(n); for(int i=0;inum.length;i+) for(int j=0;jnumi
10、.length;j+) num2i= numj0+numj1; Hy =Hy -(num2i * Math.log(num2i) / Math.log(2); / H = -Pi*log2(Pi) System.out.println(y的熵为:H(y)= + Hy); break; for(int i=0;inum.length;i+) for(int j=0;jnumi.length;j+) num3i= num0j +num1j; Hx =Hx -(num3i * Math.log(num3i) / Math.log(2); System.out.println(x的熵为:H(x)= +
11、 Hx); break; for(int i=0;inum.length;i+) for(int j=0;jnumi.length;j+) if(numij!=0) Hxy=Hxy-(numij )* (Math.log(numij) / Math.log(2);/ H = -Pi*log2(Pi) Hy_x=Hxy-Hx; Ixy=Hy-Hy_x; Hx_y=Hx-Ixy; System.out.println(联合熵为:H(xy)= +Hxy); System.out.println(条件熵:H(y|x)= +Hy_x); System.out.println(互信息为:I(xy)= +Ixy); System.out.println(条件熵:H(x|y)= +Hx_y); 3实验结果截图五、实验体会(请认真填写自己的真实体会)1.要掌握好计算方法,计算原理,学会运用程序公