方法一:
用[0,1]均匀分布模拟:
转自http://blog.xoyo.com/jaysara/article/295603.shtml
double
gauss(doulbe mean,
double
sigam,
long
int
s)
... {int i;
double x,y;
for(x=0.0;i=0;i<50;i++)
...{x=x+uniform(0.0,1.0,s)
x=x-n/12;
y=mean+sigma*x}
}
... {int i;
double x,y;
for(x=0.0;i=0;i<50;i++)
...{x=x+uniform(0.0,1.0,s)
x=x-n/12;
y=mean+sigma*x}
}
方法2:
在CARMEN源代码里看到的,具体原理还没看,好像是拿个cos模拟正态分布
double
carmen_gaussian_random( double mean, double std)
... {
const double norm = 1.0 / (RAND_MAX + 1.0);
double u = 1.0 - rand() * norm; /**//* can't let u == 0 */
double v = rand() * norm;
double z = sqrt(-2.0 * log(u)) * cos(2.0 * M_PI * v);
return mean + std * z;
}
carmen_gaussian_random( double mean, double std)
... {
const double norm = 1.0 / (RAND_MAX + 1.0);
double u = 1.0 - rand() * norm; /**//* can't let u == 0 */
double v = rand() * norm;
double z = sqrt(-2.0 * log(u)) * cos(2.0 * M_PI * v);
return mean + std * z;
}