c**r 发帖数: 10001 | 1 用C语言编程的时候,怎么生成高斯分布的随机变量呢? |
s***e 发帖数: 911 | 2
我用fortran子程序, 你拿去自己转成c的?
【在 c**r 的大作中提到】 : 用C语言编程的时候,怎么生成高斯分布的随机变量呢?
|
c**r 发帖数: 10001 | 3 那太好了, 谢谢:)
我在matlab的C 运行库找到一段很简单的代码, 可是不懂:(
do {
x = uniform_rand();
y = uniform_rand();
r = x*x + y*y ;
}while( r > 1 );
return x * sqrt( -2.0 * log(r) ) / r ;
【在 s***e 的大作中提到】 : : 我用fortran子程序, 你拿去自己转成c的?
|
a****y 发帖数: 1035 | 4 http://www.ulib.org/webRoot/Books/Numerical_Recipes/bookcpdf.html
It has algorithm to do Gaussian distribution. Do know if it's helpful for you.
【在 c**r 的大作中提到】 : 用C语言编程的时候,怎么生成高斯分布的随机变量呢?
|
m**a 发帖数: 16 | 5 法1: 进行均匀抽样,每隔若干次取平均值,根据中心极限定理,最
终分布趋于GAUSS分布。
法2: 找NUMERICAL RECIPE,有标准子程序。
【在 a****y 的大作中提到】 : http://www.ulib.org/webRoot/Books/Numerical_Recipes/bookcpdf.html : It has algorithm to do Gaussian distribution. Do know if it's helpful for you.
|
m**a 发帖数: 16 | 6 不妨写成反函数的形式可能就看清楚了,hehe.
【在 c**r 的大作中提到】 : 那太好了, 谢谢:) : 我在matlab的C 运行库找到一段很简单的代码, 可是不懂:( : do { : x = uniform_rand(); : y = uniform_rand(); : r = x*x + y*y ; : }while( r > 1 ); : return x * sqrt( -2.0 * log(r) ) / r ;
|
d*n 发帖数: 137 | 7 java的Random类有现成的.
【在 c**r 的大作中提到】 : 用C语言编程的时候,怎么生成高斯分布的随机变量呢?
|
t****n 发帖数: 56 | 8 来这里:http://mathworld.wolfram.com/Box-MullerTransformation.html
用Box Muller变换来仿真Gaussian分布!
【在 c**r 的大作中提到】 : 用C语言编程的时候,怎么生成高斯分布的随机变量呢?
|
t****n 发帖数: 56 | 9 这就是Box Muller变换!
【在 c**r 的大作中提到】 : 那太好了, 谢谢:) : 我在matlab的C 运行库找到一段很简单的代码, 可是不懂:( : do { : x = uniform_rand(); : y = uniform_rand(); : r = x*x + y*y ; : }while( r > 1 ); : return x * sqrt( -2.0 * log(r) ) / r ;
|