ÐÅÏ¢ÂÛÓë±àÂëʵÑ鱨¸æ ÏÂÔØ±¾ÎÄ

ÄÚÈÝ·¢²¼¸üÐÂʱ¼ä : 2026/4/23 13:55:11ÐÇÆÚÒ» ÏÂÃæÊÇÎÄÕµÄÈ«²¿ÄÚÈÝÇëÈÏÕæÔĶÁ¡£

ʵÓÃÎĵµ

×î´óÐŵÀÈÝÁ¿£ºc= 0.0365

2£©¼ÆËãÐÅÔ´¸öÊýΪ3£¬ÐÅËÞ¸öÊýΪ5µÄÐŵÀÈÝÁ¿£º ÔËÐÐaa.m

ÊäÈëÐÅÔ´µÄ¸öÊý£º3 ÊäÈëÐÅË޵ĸöÊý£º5

ÊäÈëÐŵÀÈÝÁ¿µÄ¾«¶È£º0.000001

ÐÅËÞ×ªÒÆ¸ÅÂʾØÕó:p =0.0484 0.1385 0.3058 0.2845 0.2227 0.2104 0.2471 0.1077 0.3762 0.0585 0.3430 0.0800 0.1808 0.3428 0.0534 ԭʼÐÅÔ´·Ö²¼£ºq = 0.3333 0.3333 0.3333 ×î¼ÑÐÅÔ´·Ö²¼£ºq =0.4691 0.1794 0.3515 ×î´óÐŵÀÈÝÁ¿£ºc =0.1559

Æß¡¢ÊµÑé×ܽá

ͨ¹ýʵÑ飬ÎÒÃǶÔÐŵÀÈÝÁ¿µÄÀí½â¸ü¼ÓÉî¿ÌÁË¡£ÐŵÀÈÝÁ¿ÊÇÖ¸ÐŵÀÄÜÎÞ´íÎó´«Ë͵Ä×î´óÐÅÏ¢ÂÊ¡£ÐŵÀµÄÊäÈë¡¢Êä³ö¶¼È¡ÖµÓÚÀëÉ¢·ûºÅ¼¯£¬ÇÒ¶¼ÓÃÒ»¸öËæ»ú±äÁ¿À´±íʾµÄÐŵÀ¾ÍÊÇÀëÉ¢µ¥·ûºÅÐŵÀ¡£ÓÉÓÚÐŵÀÖдæÔÚ¸ÉÈÅ£¬Òò´ËÊäÈë·ûºÅÔÚ´«ÊäÖн«»á²úÉú´íÎó£¬ÕâÖÖÐŵÀ¸ÉÈŶԴ«ÊäµÄÓ°Ïì¿ÉÓô«µÝ¸ÅÂÊÀ´ÃèÊö¡£ÎªÁËÆÀ¼Ûʵ¼ÊÐŵÀµÄÀûÓÃÂÊ£¬Ó¦¾ßÌ弯ËãÒѸøÐŵÀµÄÈÝÁ¿¡£ÕâÊÇÒ»¸öÇó×î´óÖµµÄÎÊÌâ¡£ÓÉÓÚ»¥ÐÅÏ¢¶ÔÊäÈë·ûºÅ¸ÅÂʶøÑÔÊÇ͹º¯Êý£¬Æä¼«Öµ½«Îª×î´óÖµ£¬Òò´ËÕâÒ²¾ÍÊÇÇó¼«ÖµµÄÎÊÌâ¡£¶ÔÓÚÀëÉ¢ÐŵÀ£¬P(x)ÊÇÒ»×éÊý£¬Âú×ã·Ç¸ºÐԺ͹éÒ»ÐÔµÈÌõ¼þ£¬¿ÉÓÃÀ­¸ñÀÊÈÕ³Ë×Ó·¨ÇóµÃÌõ¼þ¼«Öµ¡£¶ÔÓÚÁ¬ÐøÐŵÀ£¬P(x)ÊÇÒ»º¯Êý£¬ÐëÓñä·Ö·¨ÇóÌõ¼þ¼«Öµ¡£

ʵÑé¹ý³ÌÖУ¬ÎÒÃÇËäȻҲÓöµ½Á˺ܶàÀ§ÄÑ£¬µ«Ò²ÕýÊÇÒòΪÈç´Ë£¬ÎÒÃDzÅÄÜ·¢

ÏÖ×Ô¼º»ù´¡µÄ±¡Èõµã£¬Ñ§µÄ¸üÓз½Ïò¡£¶ÔÓÚ±à³Ì·½Ã棬ÎÒÃÇÒ²ÓÐÁ˺ܴóµÄÌáÉý¡£

ʵÑéÎå ÂÊÊ§Õæº¯Êý

.

ʵÓÃÎĵµ

Ò»¡¢ ʵÑéÄ¿µÄ

ÑéÖ¤ÂÊÊ§Õæº¯ÊýµÄ¼«ÖµÌØÐÔ£¬Àí½âÏà¹Ø²ÎÊýµÄ±ä»¯¶ÔÂÊÊ§Õæº¯ÊýµÄÓ°Ïì¡£

¶þ¡¢ÊµÑéÔ­Àí

£¨1£©ÊäÈëS£¬dµÄ³õʼֵ¡¢Ìõ¼þ¸ÅÂÊ¡¢Êä³ö·Ö²¼µÈÖµ£» £¨2£©¼ÆËãÊä³ö·Ö²¼qj??piipjij£»

i?1M£¨3£©½øÈëµü´ú£¬±ê־Ϊ0»òÕßÎó²î´óÓÚÖ¸¶¨epsÔòµü´ú£¬·ñÔòÍ˳öµü´ú£» £¨4£©¼ÆËãÒ»¸ö»¥ÐÅÏ¢I(qj;pji)???piipjiijlog(i?1j?1MMpjiijqj)£»

£¨5£©¼ÆËãÒ»¸öÌõ¼þ¸ÅÂÊ·Ö²¼P(j;i)?qjeMkk?1Sdij£»

Sdik?qeMi?1£¨6£©ÖØËãÒ»´Î£¨4£©£¬²¢¼ÆËãD??piipjiijdij£»

£¨7£©ÖØË㣨3£©-£¨7£©²½Ö裬ֱµ½Í˳öµü´ú£»

Èý¡¢ÊµÑé»·¾³

Microsoft Windows 7¡¢ Visual Studio 2005 profession

ËÄ¡¢±àÂë³ÌÐò

#include

#include #include using namespace std; //Define some global var const int M = 10; //MÔªÐÅÔ´ const double S = -50; //µü´úËã·¨ÖеÄÖмäÁ¿£¬SԽС£¬ÔÊÐí×î´óÊ§Õæ¶ÈDԽС£¬µ±SºÜСʱ£¨ÀýÈç-100£©£¬R(D)=H(X) static int d[M][M]; //Ê§Õæº¯Êý static double q[M], Pji[M][M]; //Êä³ö·Ö²¼ºÍÌõ¼þ¸ÅÂÊ·Ö²¼

static double Pi[M] = {0.4, 0.1, 0.25, 0.1, 0.05, 0.05, 0.01, 0.02, 0.005, 0.015}; //³õʼ»¯ÐÅÔ´µÄ¸ÅÂÊ·Ö²¼ const int systemDefine = 2; //¶¨Òå½øÖÆ£¨Ä¬ÈÏΪ2½øÖÆ£¬½á¹ûΪbit£¬Îªeʱ£¬½á¹ûΪnat£© const double eps = 1e-8; //ÔÊÐíÎó²î

.

ʵÓÃÎĵµ

//¼ÆËãÊä³ö·Ö²¼(qj)

void calcOutDistribution() { int i, j; for(j=0; j

//¼ÆËãÌõ¼þ¸ÅÂÊ·Ö²¼pji

void calcProbabilityDistribution() { int i, j, k; double temp = 0; for(i=0; i

//È¡µÃR(r,r)=I(qj;Pji)¡¾Êµ¼ÊÉϾÍÊǸù¾Ý»¥ÐÅÏ¢Á¿¹«Ê½Çó»¥ÐÅÏ¢¡¿ double getSelfInformation() {

int i, j;

double I=0; for(i=0; i

.

ʵÓÃÎĵµ

{

I += Pi[i] * Pji[i][j] * log(Pji[i][j]/q[j])/log(systemDefine); //Çó»¥ÐÅÏ¢Á¿

} } return I; }

int main(int argc, char *argv[]) { double probabilityCount = 0.0; //¸ÅÂÊºÍ for(int k=0; k eps) { cout<<\¸ÅÂʺͲ»Îª1£¬³ÌÐòÒì³£Í˳ö!\ return -1; } //ǰÁ½¸ö±äÁ¿´ú±íÇóµÄÏàÁÚµÄÁ½¸ö»¥ÐÅÏ¢R(r, r)ºÍR(r, r+1)£»D´ú±íÏÞ¶¨Ê§Õæ

double mutualInformation1, mutualInformation2, D; int i, j, flag, nCount; //³õʼֵ mutualInformation1 = 0; mutualInformation2 = 0; D = 0; flag = 0; nCount = 0; //µü´ú´ÎÊýָʾÆ÷

//init mothod //Êä³ö·Ö²¼µÄ³õʼ»¯ for(i=0; i

.

ʵÓÃÎĵµ

for(i=0; i

if(i == j) { d[i][j] = 0; } else { d[i][j] = 1; } } }

for(i=0; i

//¼ÆËãÊä³ö·Ö²¼ calcOutDistribution();

//µü´úËã·¨ cout<<\Îó²î¾«¶È£º\

while(flag == 0 || fabs(mutualInformation2-mutualInformation1) > eps) { cout<

mutualInformation1 = getSelfInformation(); //¼ÆËãÏÂÒ»¸öÌõ¼þ¸ÅÂÊ·Ö²¼ calcProbabilityDistribution(); //ÔÚÉÏÃæµÄÔ­À´µÄÊä³ö·Ö²¼qºÍÐÂÉú³ÉµÄÌõ¼þ¸ÅÂÊ·Ö²¼PjiµÄ»ù´¡ÉÏ»ñµÃÐµĻ¥ÐÅÏ¢R(r, r+1)

mutualInformation2 = getSelfInformation();

.