产生满足正态分布的随机数

 一般有两种算法:  

  算法一产生12个(0,1)平均分布的随机函数,用大数定理可以模拟出正态分布。  

  算法二用到了数学中的雅可比变换,直接生成正态分布,但此算法在计算很大规模的数时 会出现溢出错误。

附加代码:

<!–

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

–>
《产生满足正态分布的随机数》
  #include   
<
math.h
>
  
《产生满足正态分布的随机数》  #include   

<
stdio.h
>
  
《产生满足正态分布的随机数》  #include   

<
conio.h
>
  
《产生满足正态分布的随机数》  #include   

<
stdlib.h
>
  
《产生满足正态分布的随机数》  #include   

<
time.h
>
  
《产生满足正态分布的随机数》
《产生满足正态分布的随机数》  

#define
 M_PI 3.14159265358979323846

《产生满足正态分布的随机数》
《产生满足正态分布的随机数》  

double
   _random(
void
)  
《产生满足正态分布的随机数》《产生满足正态分布的随机数》  

《产生满足正态分布的随机数》
{  
《产生满足正态分布的随机数》    
int   a;  
《产生满足正态分布的随机数》    
double   r;  
《产生满足正态分布的随机数》   
《产生满足正态分布的随机数》    a
=rand()%32767;  
《产生满足正态分布的随机数》    r
=(a+0.00)/32767.00;  
《产生满足正态分布的随机数》   
《产生满足正态分布的随机数》    
return   r;  
《产生满足正态分布的随机数》   
《产生满足正态分布的随机数》  }

  
《产生满足正态分布的随机数》   
《产生满足正态分布的随机数》  

double
   _sta(
double
   mu,
double
   sigma)  
《产生满足正态分布的随机数》《产生满足正态分布的随机数》  

《产生满足正态分布的随机数》
{  
《产生满足正态分布的随机数》    
int   i;  
《产生满足正态分布的随机数》    
double   r,sum=0.0;  
《产生满足正态分布的随机数》   
《产生满足正态分布的随机数》《产生满足正态分布的随机数》    
if(sigma<=0.0)   《产生满足正态分布的随机数》{   printf(Sigma<=0.0   in   _sta!);   exit(1);   }  
《产生满足正态分布的随机数》    
for(i=1;i<=12;i++)  
《产生满足正态分布的随机数》    sum   
=   sum   +   _random();  
《产生满足正态分布的随机数》    r
=(sum6.00)*sigma+mu;  
《产生满足正态分布的随机数》   
《产生满足正态分布的随机数》    
return   r;  
《产生满足正态分布的随机数》   
《产生满足正态分布的随机数》  }

  
《产生满足正态分布的随机数》   
《产生满足正态分布的随机数》  

double
   _sta2(
double
   mu,
double
   sigma)  
《产生满足正态分布的随机数》《产生满足正态分布的随机数》  

《产生满足正态分布的随机数》
{  
《产生满足正态分布的随机数》    
double   r1,r2;  
《产生满足正态分布的随机数》   
《产生满足正态分布的随机数》    r1
=_random();  
《产生满足正态分布的随机数》    r2
=_random();  
《产生满足正态分布的随机数》   
《产生满足正态分布的随机数》    
return   sqrt(2*log(r1))*cos(2*M_PI*r2)*sigma+mu   ;  
《产生满足正态分布的随机数》   
《产生满足正态分布的随机数》  }

  
《产生满足正态分布的随机数》   
《产生满足正态分布的随机数》   
《产生满足正态分布的随机数》  

int
   main()  
《产生满足正态分布的随机数》《产生满足正态分布的随机数》  

《产生满足正态分布的随机数》
{  
《产生满足正态分布的随机数》  
int   i;  
《产生满足正态分布的随机数》  
double   mu,sigma;  
《产生满足正态分布的随机数》   
《产生满足正态分布的随机数》  srand(   (unsigned)time(   NULL   )   );  
《产生满足正态分布的随机数》  mu
=0.0;  
《产生满足正态分布的随机数》  sigma
=1.0;  
《产生满足正态分布的随机数》  printf(
Algorithm   1:\n);  
《产生满足正态分布的随机数》  
for(i=0;i<10;i++)  
《产生满足正态分布的随机数》  printf(
%lf\t,_sta(mu,sigma));  
《产生满足正态分布的随机数》  printf(
Algorithm   2:\n);  
《产生满足正态分布的随机数》  
for(i=0;i<10;i++)  
《产生满足正态分布的随机数》  printf(
%lf\t,_sta2(mu,sigma));  
《产生满足正态分布的随机数》  
return   0;  
《产生满足正态分布的随机数》   
《产生满足正态分布的随机数》  }

点赞