当生成正态分布的随机值时,定义范围的最有效方法是什么
when generating normally-distributed random values, what is the most efficient way to define the range?
FYI:random==伪随机
A。当生成均匀随机数时,我可以指定一个范围,即:
(Math.random()-Math.random())*10+5
//generates numbers between -5 and 15
B。生成一组具有高斯型正态随机性的随机值:
//pass in the mean and standard deviation
function randomNorm(mean, stdev) {
return Math.round((Math.random()*2-1)+(Math.random()*2-1)+(Math.random()*2-1))*stdev+mean);
}
//using the following values:
{
mean:400,
standard_deviation:1
//results in a range of 397-403, or +-range of 3
},
{
mean:400,
standard_deviation:10
//results in a range of 372-429, or +-range of 30
},
{
mean:400,
standard_deviation:25
//results in a range of 326-471, or +-range of 75
}
每一个都给了我一个大约标准偏差*(+-3)的范围(假设我让程序运行得更长)。
C。我可以如下计算这个范围:
- 假设我想要300-500的范围,那么var total_range=200
- 我的平均值是400,我的+-范围是total_range/2(var r=100)
- 因此标准偏差将是r/3,或者在这种情况下是33.333
这似乎奏效了,但我不知道我在数学方面做什么,所以我觉得自己像个白痴,这个解决方案感觉很笨拙,也不完全准确。
我的问题:有什么公式可以帮助我吗?我的要求如下:
- 必须能够准确地定义一系列数字
- 必须在JavaScript中尽可能高效地完成
我想也许我已经很接近了,但还不完全。
减去两个随机数不会得到正态分布,它会得到在零两侧线性下降的数字。请参阅此小提琴中的红色图表:
http://jsfiddle.net/Guffa/tvt5K/
为了得到正态分布的一个很好的近似值,把六个随机数加在一起。请参阅小提琴中的绿色图表。
因此,要获得正态分布的随机数,请使用:
((Math.random() + Math.random() + Math.random() + Math.random() + Math.random() + Math.random()) - 3) / 3
该方法基于中心极限定理,这里概括为第二种方法:http://en.wikipedia.org/wiki/Normal_distribution#Generating_values_from_normal_distribution
我想要0到1之间的高斯随机数,经过多次测试(也感谢@Guffa的回答),我发现这是最好的:
function gaussianRand() {
var rand = 0;
for (var i = 0; i < 6; i += 1) {
rand += Math.random();
}
return rand / 6;
}
作为奖励:
function gaussianRandom(start, end) {
return Math.floor(start + gaussianRand() * (end - start + 1));
}
相关文章:
- 将自定义css保持在角度范围内
- AngularJS:'$范围未定义'
- 从GWT中的HighCharts库(以及一般的Javascript)自定义Stockchart范围选择器按钮
- 对于使用传递的数据计算的局部范围变量,角度绑定在自定义指令中不起作用
- Javascript 变量范围未定义
- 具有用户范围的Google Analytics自定义维度使用情况
- 从html调用angularjs控制器中的一个函数,但未定义范围变量
- 范围中匹配日期值的自定义ng筛选器
- 在类范围内定义javascript的变量
- AngularJS范围未定义
- 隔离范围-仅在指令范围内定义的值必须执行更改
- 变量未定义/超出范围
- 当生成正态分布的随机值时,定义范围的最有效方法是什么
- 错误业力“未定义”范围变量在之前每个
- 如何在facebookjs SDK中定义范围以显示用户兴趣、电影等
- 未定义范围
- 设置一个自定义范围选择器,并在图表和导航器上禁用xAxis标签
- 如何使用Javascript制作自定义范围输入滑块
- 如何定位数组的定义范围
- 定义范围变量的最佳实践