您的位置:首页 > 其它

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

2011-11-15 10:57 239 查看
一般有两种算法:

算法一产生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=(sum-6.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;




}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: