作者mantour (朱子)
看板Fortran
标题Re: [问题] 高斯分布的乱数
时间Fri Apr 2 22:22:13 2010
※ 引述《MichaelKiske (Dr. Stein..............)》之铭言:
: 目前在写一个程式需要用到高斯分布的乱数,变异数为1,平均值为0。
: google了一下发现有各种算式但是怎麽弄都不对= =
: 假设我的程式如下,g=那行到底要用啥算式来做转换哩…
: real x, g
: call RANDOM_SEED()
: do i=1, 100
: call RANDOM_NUMBER(x)
: g =
: end do
real x, y, g
call RANDOM_SEED()
do i=1, 100
call RANDOM_NUMBER(x)
call RANDOM_NUMBER(y)
g = sqrt(-2*log(x))*cos(y*3.14159)
end do
参考
http://www.taygeta.com/random/gaussian.html
http://en.wikipedia.org/wiki/Box%E2%80%93Muller_transform
: 我google到发现有两种,一种是
: g = sqrt(1/(2*3.14159))*exp(-(x**2)/2)
: 但是生不出负值…
: 另一种是
: g = sqrt(-2*log(x))*cos(x*3.14159)
: 但这行产出来的值又超过正负1的范围orz
: 请教各位大大啦~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.213.158
※ 编辑: mantour 来自: 140.112.213.158 (04/02 22:22)
1F:推 MichaelKiske:非常感谢,後来我也是发现是这个式子 04/10 11:55