📄 chengxi2.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 + -