#include<iostream>
#include <ctime>
#include<math.h>
using namespace std;
int pi=3.141;
double Random(double min,double max){ //平均分布随机值算法;min与max为所取数的范围,保留3位有效数字
int mininteger=min*1000;//*10^n为保留n为小数,最后结果要除以10^n
int maxinteger=max*1000;
int diffinteger=maxinteger-mininteger;
int resultInteger=rand()%diffinteger+mininteger;//算法:例如取(-2,5),则result=-2+rand()%(5-(-2))
double result=resultInteger/1000.0;
cout<<result<<'\n';
return result;
}
double gauss(double x,double miu,double sigma){//正态分布函数
double result=1.0/sqrt(2*pi*sigma)*exp(-1*(x-miu)*(x-miu)/(2*sigma*sigma));
return result;
}
double GaussRandom(double miu,double sigma,double min,double max){//取坐标(x,y),若y>gauss(x)则继续循环直到y<gauss(x),取的点在曲线下
double x=0;
double y=0;
double yresult=0;
do{
double x=Random(min,max);
double y=Random(0,gauss(miu,miu,sigma));
double yresult=gauss(x,miu,sigma);
}
while(y>yresult);
return x;
}
本内容试读结束,登录后可阅读更多
下载后可阅读完整内容,剩余1页未读,立即下载
- 1
- 2
- 3
- 4
- 5
- 6
前往页