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

📄 信息论编码.cpp

📁 信息编码的几个小的源程序。进行信息编码。
💻 CPP
字号:


void chengfa(double *a,double **b,double *c,double **d,double **e,int m,int n)
{   
	int a1=0,a2=0;
	int c1=0;
	double sum=0;
	int i,t;
	//------------------------------计算得到py的值
	for(i=0;i<n;i++)      
	{  
		sum=0;
		for(a2=0;a2<m;a2++)
		{ 
			sum+=a[a2]*b[i][a2];
		}
      c[a1]=sum;
	  a1++;
	}
    //--------------------------------计算得到pxy的值   
	for(i=0;i<n;i++)     
	{  
		for(a2=0;a2<m;a2++)
		{ 
		  d[i][a2]=a[a2]*b[i][a2];
		  }
     }
    //-------------------------------------------计算得到px_y
	for(i=0;i<n;i++)    
	{
		for(t=0;t<m;t++)
		{
			e[i][t]=d[i][t]/c[t];
          }
	}		
     
}
//------------------------------------------计算log时的函数
double log(double a,double b)   
{
	double c;
	c=log(b)/log(a);
	return c;
}


void xinxi()
{
	int m,n;
	int k,t;
	double p1=0,p2=0,p3=0,p4=0;
	double *px,**py_x,*py,**px_y,**pxy;
	cout<<"请输入信道特性矩阵的大小:"<<endl;
 	cin>>m>>n;
	//---------------------------------------开辟空间
     px=(double *)malloc((m)*sizeof(double));    
	 py_x=(double **)malloc(m);
	 pxy=(double **)malloc(m);
	 px_y=(double **)malloc(m);
	 for(k=0;k<m;k++)
	 {	
	  py_x[k]=(double *)malloc(n*sizeof(double));
	 }
     py=(double *)malloc((n)*sizeof(double));
	 for(k=0;k<m;k++)
	 {
      pxy[k]=(double *)malloc(n*sizeof(double));
	 }
    for(k=0;k<m;k++)
	{
	  px_y[k]=(double *)malloc(n*sizeof(double));
	}                                                  
	//------------------------------------输入px的值
	cout<<"input px\n";
	for(int j=0;j<m;j++)                       
	cin>>px[j];
	//-------------------------------------输入py_x的值
	cout<<"input py_x\n";
	for(t=0;t<m;t++)                             
	{	
		for(k=0;k<n;k++)
		{
			cin>>py_x[t][k];
		}
	}
    chengfa(px,py_x,py,pxy,px_y,m,n);
	//------------------------------------输出py
	cout<<"py的值为:"<<endl;            
	for(k=0;k<n;k++)                         
		cout<<py[k]<<"\t";
	cout<<"\n";                          
   	//----------------------------------输出pxy  
	cout<<" pxy的值为:"<<endl;         
	for(t=0;t<m;t++)                    
	{	
		for(k=0;k<n;k++)
		{
		cout<<pxy[t][k]<<"\t";
		}
		cout<<endl;
	}                                          
    //-----------------------------输出px_y
	cout<<" px_y的值为:"<<endl;             
	for(t=0;t<m;t++)                 
	{	
		for(k=0;k<n;k++)
		{
			cout<<px_y[t][k]<<"\t";
		}
		cout<<endl;
	}                                  
  	//-------------------------输出信源商
	cout<<"信源商值为"<<endl;           
	for(t=0;t<n;t++)                 
		p1+=(-px[t])*log(2,px[t]);
		cout<<p1<<endl;                          
    //--------------------------输出条件商
    cout<<"条件商值为"<<endl;
    for(t=0;t<m;t++)                 
	{	
		for(k=0;k<n;k++)
		{
			p2+=(-pxy[t][k])*log(2,py_x[t][k]);
		}
	} 
	cout<<p2<<endl;
   //------------------------------输出联合商
    cout<<"联合商值为"<<endl;
    for(t=0;t<m;t++)                 
	{	
		for(k=0;k<n;k++)
		{
			p3+=(-pxy[t][k])*log(2,pxy[t][k]);
		}
	} 
	cout<<p3<<endl;
    //------------------------------输出交互商
    cout<<"交互商值为"<<endl;
    for(t=0;t<m;t++)                 
	{	
		for(k=0;k<n;k++)
		{
			p3+=(-pxy[t][k])*(log(2,pxy[t][k])-log(2,px[t])-log(2,py[k]));
		}
	} 
	cout<<p3<<endl;

}

⌨️ 快捷键说明

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