⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chengxi2.cpp

📁 实验一:信息量及信道容量的计算实验一
💻 CPP
字号:
#include<iostream.h>            //用于求有关已知一个随机事件的概率和条件概率的题型
#include<math.h>
const int n=2;                //n和m表示两个随机事件的离散信源
const int m=2;
double a[n][m];              //条件概率分布
double Lianhe[n][m];         //联合概率分布
double b[n];                 //X的概率分布
double c[m];                 //Y的概率分布
double Lianheshang;          //联合熵
double danHX;                //H(x)
double Xtiaojian;            //H(Y/X)
double Ytiaojian;            //H(X/Y)
double danHy;                //H(Y)
double Huxin;                //I(X;Y)
void input();                //用于输入数据
void QiTai();                //用于计算其他概率
void LianheH();              //用于计算联合熵
void BH();                   //用于计算H(x)
void Tiaojian();             //用于计算H(Y/X)
void Yshang();               //用于计算H(Y)
void QiTashang();            //用于计算H(X/Y)和I(X;Y)
void main()
{
	input();
	QiTai();
    LianheH();
    BH();
    Tiaojian();
    Yshang();
    QiTashang();
}
void input()
{
 cout<<"请输入事件X的概率密度  :\n";
 cin>>b[0];
 cout<<"请输入x1条件下y1的概率密度  :\n";
 cin>>a[0][0];
 cout<<"请输入x2条件下y1的概率密度  :\n";
 cin>>a[1][0];
}
void QiTai()
{
	b[1]=1-b[0];
	a[0][1]=1-a[0][0];
	a[1][1]=1-a[1][0];
    for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		 Lianhe[i][j]=b[i]*a[i][j];
	}
  cout<<"联合概率分布为:"<<endl;
  for( i=0;i<n;i++)
		for(int j=0;j<m;j++)

		cout<< Lianhe[i][j]<<endl;
		


}
void BH()
{

	
    for(int i=0;i<n;i++)
	    danHX+=b[i]*(log(b[i])/log(2))*(-1);
	    cout<<"H(X)熵为  "<<danHX<<endl;
	
	
}

void LianheH()
{
  for(int i=0;i<n;i++)
		for(int j=0;j<m;j++)
			Lianheshang+=Lianhe[i][j]*(log(Lianhe[i][j])/log(2))*(-1) ;
		    cout<<"联合熵为   "<<Lianheshang<<endl;
}
void  Tiaojian()
{
   for(int i=0;i<n;i++)
		for(int j=0;j<m;j++)
			Xtiaojian+=Lianhe[i][j]*(log(a[i][j])/log(2))*(-1) ;
		    cout<<"H(Y/X)为   "<<Xtiaojian<<endl;
}
void Yshang()
{
	for(int j=0;j<m;j++)
    	for(int i=0;i<n;i++)
		  c[j]+=Lianhe[i][j];
	cout<<"Y的概率分布为 :"<<endl;
    for(int i=0;i<n;i++)
	
	    cout<<c[i]<<endl;
	    danHy=c[0]*(log(c[0])/log(2))*(-1)+c[1]*(log(c[1])/log(2))*(-1);
	    cout<<"H(Y)熵为  "<<danHy<<endl;
}
void QiTashang()
{ 
    Ytiaojian=Lianheshang-danHy;
    Huxin=danHX+danHy-Lianheshang;
	cout<<"H(X/Y)为 "<<Ytiaojian<<endl;
	cout<<"I(X;Y)为 "<<Huxin<<endl;
}
	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -