四个分布程序以及结果.docx
- 文档编号:26867253
- 上传时间:2023-06-23
- 格式:DOCX
- 页数:18
- 大小:203.44KB
四个分布程序以及结果.docx
《四个分布程序以及结果.docx》由会员分享,可在线阅读,更多相关《四个分布程序以及结果.docx(18页珍藏版)》请在冰豆网上搜索。
四个分布程序以及结果
1.高斯分布:
代码:
#include"stdafx.h"
#include
#include
#include
#include
usingnamespacestd;
floatgaussrand(floatmu,floatsigma)
{
staticfloatV1,V2,S;
staticintphase=0;
floatX;
if(phase==0){
do{
floatU1=(float)rand()/RAND_MAX;
floatU2=(float)rand()/RAND_MAX;
V1=2*U1-1;
V2=2*U2-1;
S=V1*V1+V2*V2;
}while(S>=1||S==0);
X=V1*sqrt(-2*log(S)/S);
}else
X=V2*sqrt(-2*log(S)/S);
phase=1-phase;
returnX*sigma+mu;
}
voidmain()
{
floatmu,sigma,randnum;
inttotalnum;
float*data;
FILE*outfile;
cout<<"PleaseinputtheMeanandVarianceofNormalDistribution:
";
cin>>mu>>sigma;
cout<<"PleaseinputtheNumberofpoints:
";
cin>>totalnum;
data=newfloat[totalnum];
outfile=fopen("output.txt","w");
for(inti=0;i { randnum=gaussrand(mu,sigma); fprintf(outfile,"%f",randnum); data[i]=randnum; } //statistical intNumInterval; cout<<"PleaseinputtheNumberofInterval: "; cin>>NumInterval; floatStepsize; Stepsize=6*sqrt(sigma)/NumInterval; floatleft,right; float*count; float*PlotData; count=newfloat[NumInterval]; PlotData=newfloat[NumInterval]; left=mu-3*sqrt(sigma); right=left+Stepsize; FILE*outfileCount; FILE*outfileData; outfileCount=fopen("count.txt","w"); outfileData=fopen("PlotData.txt","w"); for(intk=0;k { count[k]=0; for(intj=0;j { if(data[j]>=left&&data[j] count[k]=count[k]+1; } PlotData[k]=(left+right)/2; fprintf(outfileCount,"%f",count[k]); fprintf(outfileData,"%f",PlotData[k]); left=right; right=left+Stepsize; } } 运行结果: 2000个数据点,均值为10方差4,分为20个区间 对应直方图: 50000个数据点,均值为10方差4,分为500个区间 对应直方图: 采取不同个数数据的比较: 2.均匀分布: 代码: #include"stdafx.h" #include #include #include #include #include usingnamespacestd; floatrandomUniform(floatdMinValue,floatdMaxValue) { floatpRandomValue=(float)(rand()/(float)RAND_MAX); pRandomValue=pRandomValue*(dMaxValue-dMinValue)+dMinValue; returnpRandomValue; } voidmain() { floatmin,max,randnum; inttotalnum; srand(time(NULL)); float*data; FILE*outfile; cout<<"PleaseinputtheMinandMaxofUniformDistribution: "; cin>>min>>max; cout<<"PleaseinputtheNumberofpoints: "; cin>>totalnum; data=newfloat[totalnum]; outfile=fopen("output.txt","w"); for(inti=0;i { randnum=randomUniform(min,max); fprintf(outfile,"%f",randnum); data[i]=randnum; } //statistical intNumInterval; cout<<"PleaseinputtheNumberofInterval: "; cin>>NumInterval; floatStepsize; Stepsize=(max-min)/NumInterval; floatleft,right; float*count; float*PlotData; count=newfloat[NumInterval]; PlotData=newfloat[NumInterval]; left=min; right=left+Stepsize; FILE*outfileCount; FILE*outfileData; outfileCount=fopen("count.txt","w"); outfileData=fopen("PlotData.txt","w"); for(intk=0;k { count[k]=0; for(intj=0;j { if(data[j]>=left&&data[j] count[k]=count[k]+1; } PlotData[k]=(left+right)/2; fprintf(outfileCount,"%f",count[k]); fprintf(outfileData,"%f",PlotData[k]); left=right; right=left+Stepsize; } } 运行结果: 1000个数据点,最小值为5最大值为10,分为10个区间 对应直方图: 对应散点数据分布图 50000个数据点,最小值为5最大值为10,分为500个区间 对应直方图 对应散点数据分布图 采取不同个数数据的比较: 3.泊松分布: 代码: #include"stdafx.h" #include #include #include #include #include usingnamespacestd; floatrandomUniform(floatdMinValue,floatdMaxValue) { floatpRandomValue=(float)(rand()/(float)RAND_MAX); pRandomValue=pRandomValue*(dMaxValue-dMinValue)+dMinValue; returnpRandomValue; } floatrandomPossion(floatlambda) { floatx=-1,u; floatlog1,log2; log1=0; log2=-lambda; do { u=randomUniform(0,1); log1+=log(u); x++; }while(log1>=log2); returnx; } voidmain() { floatlambda,randnum; inttotalnum; srand(time(NULL)); float*data; FILE*outfile; cout<<"PleaseinputtheLambdaofPossionDistribution: "; cin>>lambda; cout<<"PleaseinputtheNumberofpoints: "; cin>>totalnum; data=newfloat[totalnum]; outfile=fopen("output.txt","w"); for(inti=0;i { randnum=randomPossion(lambda); fprintf(outfile,"%f",randnum); data[i]=randnum; } //statistical intNumInterval; cout<<"PleaseinputtheNumberofInterval: "; cin>>NumInterval; floatStepsize; Stepsize=2*lambda/NumInterval; floatleft,right; float*count; float*PlotData; count=newfloat[NumInterval]; PlotData=newfloat[NumInterval]; left=0; right=left+Stepsize; FILE*outfileCount; FILE*outfileData; outfileCount=fopen("count.txt","w"); outfileData=fopen("PlotData.txt","w"); for(intk=0;k { count[k]=0; for(intj=0;j { if(data[j]>=left&&data[j] count[k]=count[k]+1; } PlotData[k]=(left+right)/2; fprintf(outfileCount,"%f",count[k]); fprintf(outfileData,"%f",PlotData[k]); left=right; right=left+Stepsize; } } 运行结果: 1000个数据点,lambda为10,分为20个区间 对应直方图: 50000个数据点,lambda为10,分为20个区间 对应直方图: 采取不同个数数据的比较: 4.指数分布: 代码: #include"stdafx.h" #include #include #include #include #include usingnamespacestd; floatrandomExponential(floatlambda) { floatpV=0.0; while(true) { pV=(float)rand()/(float)RAND_MAX; if(pV! =1) { break; } } pV=(-1.0/lambda)*log(1-pV); returnpV; } voidmain() { floatlambda,randnum; inttotalnum; srand(time(NULL)); float*data; FILE*outfile; cout<<"PleaseinputtheLambdaofExponentialDistribution: "; cin>>lambda; cout<<"PleaseinputtheNumberofpoints: "; cin>>totalnum; data=newfloat[totalnum]; outfile=fopen("output.txt","w"); for(inti=0;i { randnum=randomExponential(lambda); fprintf(outfile,"%f",randnum); data[i]=randnum; } //statistical intNumInterval; cout<<"PleaseinputtheNumberofInterval: "; cin>>NumInterval; floatStepsize; Stepsize=5.0/NumInterval; floatleft,right; float*count; float*PlotData; count=newfloat[NumInterval]; PlotData=newfloat[NumInterval]; left=0; right=left+Stepsize; FILE*outfileCount; FILE*outfileData; outfileCount=fopen("count.txt","w"); outfileData=fopen("PlotData.txt","w"); for(intk=0;k { count[k]=0; for(intj=0;j { if(data[j]>=left&&data[j] count[k]=count[k]+1; } PlotData[k]=(left+right)/2; fprintf(outfileCount,"%f",count[k]); fprintf(outfileData,"%f",PlotData[k]); left=right; right=left+Stepsize; } } 运行结果: 1000个数据点,lambda为1,分为20个区间 对应直方图: 50000个数据点,lambda为1,分为20个区间 对应直方图: 采取不同个数数据的比较:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 四个 分布 程序 以及 结果
![提示](https://static.bdocx.com/images/bang_tan.gif)