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