24小时热门版块排行榜    

查看: 1866  |  回复: 3

[交流] 产生高斯分布随机数的原理

for (i=0;iatoms_num;i=i+2)
        {
                for (a=0;a<3;a++)
                {
                        do{               
                                u1=(real)rand()/RAND_MAX;
                                u2=(real)rand()/RAND_MAX;
                                v1=2.0*u1-1.0;
                                v2=2.0*u2-1.0;
                                s=v1*v1+v2*v2;
                        }while(s>=1.0);
                        r=-2.0*log(s)/s;
                        work->wx[a]=v1*sqrt(r);
                        work->wx[i+1][a]=v2*sqrt(r);
                }
        }
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

» 抢金币啦!回帖就可以得到:

查看全部散金贴

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ryhzd

木虫 (正式写手)


★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
微尘、梦想(金币+2): 鼓励交流!这个不要太认真哈!版主会视情况编辑的! 2011-05-31 20:20:52
dubo(金币+5): 谢谢,哈,金币给你吧 2011-06-06 16:24:41
这个是The Box-Muller transformation的改进方法,称为Polar Method,while循环里面取代了Box-Muller方法中的sin和cos函数,从而提高了速度。
ps:很不明白,很多人明明是求助帖,却写的是交流贴,如果是交流贴,只是应该有你给大家分享的东西。
2楼2011-05-31 18:42:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

gwyy

木虫 (小有名气)


★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
jjdg(金币+1): 感谢参与 2011-06-01 01:39:42
dubo(金币+5): 谢谢,哈,金币给你吧 2011-06-06 16:24:48
在Java的Random类中就是采用这种方法生成正态(高斯)分布随机数的,在JFC帮助文档中有说明。该方法的详细原理可以参看Knuth所著的“计算机程序设计艺术”一书的数值算法卷。生成正态随机数有很多不同方法,这种方法最大好处就是速度快,对于较大规模的随机抽样、仿真和模拟有很大用处。学物理的经常用Monte Carlo,应该很熟。
3楼2011-05-31 20:40:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
谢谢大家
4楼2011-06-06 16:24:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 dubo 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见