博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实验二 二维随机变量信息量的计算
阅读量:3966 次
发布时间:2019-05-24

本文共 2403 字,大约阅读时间需要 8 分钟。

一、实验目的:

了解随机数的生成方法,掌握二变量多种信息量的计算方法,并用C/C++程序实现

二、实验内容:

用C/C++语言(其他语言也可以)实现:

(1)根据如下的联合概率密度
在这里插入图片描述

分别计算X与Y的熵、联合熵、条件熵:H(X)、H(Y)、H(X,Y)H(X|Y)、I(X;Y);

在这里插入图片描述

#include
#include
int main(){
float p[2][2],Hx,Hy,Hxy,pa1,pa2,pb1,pb2; int i,j; printf("请输入联合概率:\n"); for( i=0;i<2;++i){
for( j=0;j<2;++j){
scanf("%f",&p[i][j]); } printf("\n"); } printf("联合概率为:\n"); for( i=0;i<2;++i){
for( j=0;j<2;++j){
printf("%f ",p[i][j]); } printf("\n"); } for(i=0;i<2;++i){
pa1+=p[0][i]; pa2+=p[1][i]; pb1+=p[i][0]; pb2+=p[i][1]; } printf("\npa1=%f,pa2=%f,pb1=%f,pb2=%f\n",pa1,pa2,pb1,pb2); Hx = (-pa1*(log(pa1)/log(2)))+(-pa2*(log(pa2)/log(2))); Hy = (-pb1*(log(pb1)/log(2)))+(-pb2*(log(pb2)/log(2))); printf("\nH(X)的熵为:%f\n",Hx); printf("\nH(Y)的熵为:%f\n",Hy); for(j=0;j<2;++j){
for(i=0;i<2;++i){
Hxy += -p[i][j]*(log(p[i][j])/log(2)); } } printf("\n联合熵为H(X,Y):%f\n",Hxy); printf("\n条件熵为H(X|Y):%f\n",Hxy-Hy); printf("\n互信息熵为I(X;Y):%f\n",Hx-(Hxy-Hy)); }

2)利用random函数和归一化方法构造一个二维离散随机变量(X,Y);

先产生4个整数,选如下的归一化方法将其变为0~1之间的值,

简单的归一化方法:

把数变为(0,1)之间的小数

例:{2.5 3.5 0.5 1.5}归一化后变成了{0.3125 0.4375 0.0625 0.1875}

解:2.5+3.5+0.5+1.5=8,

2.5/8=0.3125,
3.5/8=0.4375,
0.5/8=0.0625,
1.5/8=0.1875.

将其作为二维随机变量的联合分布:

在这里插入图片描述

分别计算X与Y的熵、联合熵、条件熵:H(X)、H(Y)、H(X,Y)H(X|Y)、I(X;Y);

在这里插入图片描述

#include
#include
#include
#include
int main(){
float p[2][2],sum=0,Hx,Hy,Hxy,pa1,pa2,pb1,pb2;; int i,j; srand(time(0)); printf("\n生成随机数为:\n"); for( i=0;i<2;++i){
for( j=0;j<2;++j){
p[i][j] = 1.0*(rand()%RAND_MAX)/RAND_MAX; sum+=p[i][j]; printf("%f ",p[i][j]); } printf("\n"); } printf("\nsum:%f \n",sum); printf("\n联合概率为:\n"); for( i=0;i<2;++i){
for( j=0;j<2;++j){
p[i][j]/=sum; printf("%f ",p[i][j]); } printf("\n"); } for(i=0;i<2;++i){
pa1+=p[0][i]; pa2+=p[1][i]; pb1+=p[i][0]; pb2+=p[i][1]; } printf("\npa1=%f,pa2=%f,pb1=%f,pb2=%f\n",pa1,pa2,pb1,pb2); Hx = (-pa1*(log(pa1)/log(2)))+(-pa2*(log(pa2)/log(2))); Hy = (-pb1*(log(pb1)/log(2)))+(-pb2*(log(pb2)/log(2))); printf("\nH(X)的熵为:%f\n",Hx); printf("\nH(Y)的熵为:%f\n",Hy); for(j=0;j<2;++j){
for(i=0;i<2;++i){
Hxy += -p[i][j]*(log(p[i][j])/log(2)); } } printf("\n联合熵为H(X,Y):%f\n",Hxy); printf("\n条件熵为H(X|Y):%f\n",Hxy-Hy); printf("\n互信息熵为I(X;Y):%f\n",Hx-(Hxy-Hy));}

转载地址:http://bmfki.baihongyu.com/

你可能感兴趣的文章
S3C2440上触摸屏驱动实例开发讲解(…
查看>>
Android驱动例子(LED灯控制)(1…
查看>>
Android驱动例子(LED灯控制)(1…
查看>>
android驱动例子(LED灯控制)
查看>>
android驱动例子(LED灯控制)
查看>>
第二章&nbsp;Android内核和驱动程序(转)
查看>>
第二章&nbsp;Android内核和驱动程序(转)
查看>>
第一章&nbsp;Android系统介绍
查看>>
Android电源管理(zz)
查看>>
Android&nbsp;HAL基础
查看>>
Android电源管理(zz)
查看>>
Android平台开发-Android&nbsp;HAL&nbsp;deve…
查看>>
Android&nbsp;HAL基础
查看>>
2011年06月21日
查看>>
Android平台开发-Android&nbsp;HAL&nbsp;deve…
查看>>
Android&nbsp;HAL实例解析
查看>>
2011年06月21日
查看>>
Android&nbsp;HAL实例解析
查看>>
在驱动模块初始化函数中实现设备节…
查看>>
在驱动模块初始化函数中实现设备节…
查看>>