具有正态分布的随机数生成器,用于objective-c
答
使用箱穆勒 - 转型:
1)你需要两个均匀分布的随机数u和v在间隔加倍(0,1](0需要被排除在外):
double u =(double)(random() %100000 + 1)/100000; //for precision
double v =(double)(random() %100000 + 1)/100000; //for precision
2.)计算具有0平均和的1标准偏差西格玛均匀分布值:如果需要的话添加西格马和平均为这样的目标分布
double x = sqrt(-2*log(u))*cos(2*pi*v); //or sin(2*pi*v)
3.) :
double y = x * sigmaValue + averageValue;
4.)把它放在一个数组
[randomNumberArray addObject:[NSNumber numberWithDouble:y]]
没有为objc无功能norminv
。所以,这里需要数学。
编辑:我喜欢用random()
能够播种随机值产生
答
让我说,请纠正我,如果我错了前言本!
这是我的理解是,箱穆勒转型依赖于()的源数字是他们的自我均匀分布,因此利用随机或RAND()作为箱穆勒数据集的源将不必然会产生均匀分布。
而是打算采用通用的一组均匀分布的随机数,并生成均匀分布在二维坐标系中的独立随机数对。
Wikipedia: Box-Muller Transform
然而有另一种方式:在使用的函数的rand48库
在大多数Unix系统(和iOS或OSX因而目标C):
double drand48(void);
void srand48(long int seedval);
srand48()种子发生器,并drand48()产生均匀分布在区间[0.0 - 1.0]的随机数
你是真的,但我认为有一些方法可以帮助这个实现更容易 – 2013-03-03 13:31:29
这可能有帮助:http://stackoverflow.com/questions/12948293/ios-gaussian-distribution-of-random-numbers – Spectravideo328 2013-03-03 13:44:56