用c编写求信息论中各种熵和信息量的程序
#include<stdio.h>
#include<math.h>
#define u 20
int i,j,n,m;
float Ix[u],I[u][u],H_X,H_Y,H_XY,I_XY,H_XpY,Pypx[u][u],Px[u],H_YpX,Py[u],Pxpy[u][u],Pxy[u][u];
/*定义的Ix[]=I(x[i])自信息;I[][]=I(x[i];y[j])互信息;H_X=H(X)平均自信息;H_XY=H(XY)联合熵;
I_XY=I(X;Y)平均互信息;H_XpY=H(X|Y)、H_YpX=H(Y|X)条件熵;Pypx[i][j]=P(y[j]|x[i])条件概率;
Px[i]=P(x[i])发x[i]的概率;H_XpY=H(Y/X)条件熵;Py[j]=P(y[j])收到y[j]的概率;Pxpy[i][j]=P(x[i]/y[j])条件概率;
Pxy[i][j]=P(x[i]y[j])联合概率*/
/*定义以2为底的对数函数*/
float log2(float x)
{
float z;
z=(float)(log(x)/log(2));
return z;
}
/*求自信息的函数*/
float self_inf(float x)
{
float z;
z=-log2(x);
return z;
}
/*求互信息的函数*/
float mut_inf(int x,int y)
{
float z;
z=log2(Pxpy[x][y]/Px[x]);
return z;
}
/*求平均自信息的函数*/
float entropy(float *x,int n)
{
float z=0;
for(i=1;i<=n;i++)
{
z+=(*(x+i))*log2(1/(*(x+i)));
}
return z;
}
/*求联合熵的函数*/
float joint_entropy(float (*p)[u])
{
float z=0;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
z+=*(p[i]+j)*log2(1/(*(p[i]+j)));
}
return z;
}
main()
{
float s=0;
printf("\nplease in put the dimension of 'X' and 'Y'\n");
scanf("%d %d",&n,&m);
printf("\nThe dimension of X is n=%d\nThe dimension of Y is m=%d\nPlease input the condition probability:P(y[j]/x[i]),",n,m);
printf("(after you input one number please click the 'enter')\n");
/*条件概率P(y[j]/x[i])赋值*/
for(i=1;i<=n;i++)
{for(j=1;j<=m;j++)
{printf("P(y[%d]/x[%d])=",j,i);
scanf("%f",&Pypx[i][j]);
}
}
printf("please input P(x[i]):(after you input one number please click the 'e
相关文档:
一个简单的小程序, 原题目见<C语言程序设计-现代方法>第八章练习13.
由于自己只看到第八章, 所以, 不敢贸然使用函数等其他内容, 高手请放声大笑.
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define ROWS 10
#define COLS 10
/**
* @author: selfimpr
* @blog: http:// ......
一、概述及示例代码
Delphi中包括许多已经封装好的类及控件,其中的非可视化控件库以功能方式划分可处理诸多应用需求。若使用C++实现系统时对某些功能简单调用delphi中现成的库时即可。因此将delphi中的库以DLL形式封装好之后如何将方法导出可供C++调用是本文记录的重点。C++调用的方式有多种,在这里只讨论一种静 ......
1、开发环境请参考《搭建ACE-5.7.4+VS2008开发环境》一文
2、gSOAP库,下载地址:http://gsoap2.sourceforge.net/,本文使用的版本是:gsoap_2.7.15,gSOAP的编程可以参考doc目录下的soapdoc2.pdf,官方文档写的非常详细。
让我们开始gSOAP编码旅程:
1、创建gsoap_server.h:
//gsoap ns2 service namespace: http://l ......
#include <stdio.h>
#define MAXHIST 15
#define MAXWORD 11
#define IN 1
#define OUT 0
//打印输入中单词长度的水平方向直方图,
void main()
{
int c, i, nc, state;
int len; //length of each bar
int maxvalue; &n ......