请教~~产生服从高斯分布的随机数
c++吧
全部回复
仅看楼主
level 1
nuedenghe 楼主
2011年05月09日 10点05分 1
level 1
nuedenghe 楼主
#include <ctime>
#include <stdlib.h>
#include <cmath>
using namespace std;
double gauss(double mean,double sigma)
{           
     double ymin=mean-4*sigma, ymax=mean+4*sigma;
     double pymax=1/sqrt(2*3.1415926)/sigma;
     double y=ymin+1.0*(ymax-ymin)*rand()/(RAND_MAX);
     double py=pymax*exp(-(y-mean)*(y-mean)/2.0/sigma/sigma);
     double x=pymax*1.0*rand()/(RAND_MAX);
     {if (x>py) return gauss(mean, sigma);
     else      return y;}
}
int main()
{
     double a,b;
     cout<<"请输入高斯分布的mean和sigma"<<endl;
     cin>>a>>b;
     cout<<"请输入要多少个数"<<endl;
     int n;
     cin>>n;
     srand(time(0));   
      for(int i=0; i<n; i++)
      {
          double c=gauss(a,b);
          cout<<c<<endl;
      }
     return 0;
}
此程序的结果并不服从高斯分布
请各位帮忙看看,这个程序问题到底出在哪儿????
PS 请吧主勿删,俺真的想了解算法的问题。。。
2011年05月09日 10点05分 2
level 9
高斯分布[揉脸],上学期学的概率论,忘记了,只记得标准正态分布,给个分布函数来看看
2011年05月09日 14点05分 4
level 1
另外这里给你个简单明了点的:
//////////////////////////////////////////////////////////////////////////
#include    <iostream.h>
#include    <time.h>
void    main()
{
         time_t    t;
         srand((unsigned    int)time(&t));        //种种子
         for(int    i=0;i <10;i++)
         {
                 cout < <rand()%10000 < <endl;          //产生1--10000的随即书
         }
}
///////////////////////////////////////////////////////////////////////////
如果你确定其它数学算法没问题的话,那么应该就是少了srand函数的问题了,以上代码摘抄自这里 http://topic.csdn.net/t/20021009/18/1082559.html
2011年05月09日 15点05分 5
level 1
才发现你已经调用了srand,但是在后面,你将srand放到rand之前看看....
2011年05月09日 15点05分 6
1