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

📄 shibielianxi_1.cpp

📁 通过已知的先验概率
💻 CPP
字号:
#include <stdio.h>
#include <iostream.h>
#include <math.h>
#include <stdlib.h>
#define pi 3.1415926
double AverageRandom(double min,double max);      
double Normal(double x,double mean,double variance);
void NormalRandom(double mean, double variance,double min,double max,int number,double* sample);
void Estimate(double* mean,double* variance,double* sample,int number);
void Distinguish(double x,double mean_1,double variance_1,double mean_2,double variance_2);

void main()
{
	double sample_1[200];
	double sample_2[200];
	double test[5];
	double x;
	int i;
	printf("sample:\n");
	NormalRandom(72,25,62,82,200,sample_1);
	NormalRandom(184,36,172,196,200,sample_2);	
	double mean_1,variance_1,mean_2,variance_2;
    Estimate(& mean_1,& variance_1,& sample_1[0],200);
    Estimate(& mean_2,& variance_2,& sample_2[0],200);
    printf("the means and the variance of the two type is:\n");
	printf("%f\n%f\n%f\n%f\n",mean_1,variance_1,mean_2,variance_2);
	for(i=0;i<5;i++)
	{
        
	
 	cout<<"Please input the number to define which type belongs to x:"<<endl;
    cin>>x;
	//scanf("%f",&test[i]);
	//printf("%d\n",test[i]);
	//x=test[i];
    Distinguish(x,mean_1,variance_1,mean_2,variance_2);
	}
}

double AverageRandom(double min,double max)      
{
        long minInteger = (int)(min*10000);
        long maxInteger = (int)(max*10000);
        long randInteger = rand()*rand();
        long diffInteger = maxInteger - minInteger;
        long resultInteger = randInteger % diffInteger + minInteger;
        return resultInteger/10000.0;
}

double Normal(double x,double mean,double variance)     
{
        return 1.0/sqrt(2*pi*variance) * exp((-1)*(x-mean)*(x-mean)/(2*variance*variance));
}
void NormalRandom(double mean, double variance,double min,double max,int number,double* sample)
{
	    for (int i=0;i<number;i++)
		{
			double x;
            double dScope;
            double y;
            do
			{
               x = AverageRandom(min,max); 
               y = Normal(x, mean, variance);
               dScope = AverageRandom(0, Normal(mean,mean,variance));
			}while( dScope > y);
        sample[i]=x;
		printf("%f\n",x);
        }
}

void Estimate(double* mean,double* variance,double* sample,int number)
{
	*mean=0;
    *variance=0;
	for (int i=0;i<number;i++)
	{
		*mean=*mean+1.0/number*sample[i];
    }
	for (int j=0;j<number;j++)
	{
		*variance=*variance+1.0/number*(sample[j]-*mean)*(sample[j]-*mean);

	}
}

void Distinguish(double x,double mean_1,double variance_1,double mean_2,double variance_2)
{
	double P_w1,P_w2,P_x_w1,P_x_w2,P_w1_x;
	P_w1=0.4;
	P_w2=0.6;
    P_x_w1=Normal(x,mean_1,variance_1);
	P_x_w2=Normal(x,mean_2,variance_2);
    P_w1_x=P_x_w1*P_w1/(P_x_w1*P_w1+P_x_w2*P_w2);
	if (P_w1_x>=0.5)
	{
	    cout<<"x belongs to type 1.\n"<<endl;
	}
	else
	{
	    cout<<"x belongs to type 2\n"<<endl;
	}
}

⌨️ 快捷键说明

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