我的数学知识可能仅限于自己解决这个问题。我发现了类似的question但是,重点是中心而不是边界。
我想创建具有最大值和最小值的随机数,但重点关注最大值和最小值,因此接近最大值和最小值的数字应该比介于两者之间的数字出现的频率更高。
并使用这个online tool我生成了我正在寻找的函数,应该类似于
y = 0.05 * x^2
这是我的基本想法,并试图将其转换为 javascript,我最终得到了这个:
for (let i = 0; i < 100; i++) {
// Create random x with ^ 2 with max=100 and min=0
let x = Math.pow(Math.floor(Math.random() * (100 - 0 + 1)) + 0, 2);
// log the random number in the console
console.log(0.05 * x);
}
但是当然这没有任何实际意义,因为我也可以在控制台中看到(我订购了它们,以便更清楚地看到)
> 0 0
> 0.05
> 0.05
> 0.2
> 0.2
> 0.8
> 2.45
> 3.2
> 3.2
> 3.2
> 4.05
> 4.05
> 4.05
> 6.05
> 8.45
> 8.45
> 14.45
> 16.2
> 16.2
> 16.2 20 20
> 22.05
> 22.05
> 22.05
> 26.45
> 28.8
> 28.8
> 31.25
> 33.8
> 36.45
> 39.2
> 42.05
> 48.05
> 48.05
> 48.05
> 51.2
> 57.8
> 57.8
> 57.8
> 64.8
> 64.8
> 64.8
> 68.45
> 76.05
> 88.2
> 88.2
> 92.45
> 92.45
> 92.45
> 96.8
> 101.25
> 105.8
> 110.45 125
> 130.05
> 130.05
> 135.2
> 140.45
> 140.45
> 145.8
> 145.8
> 145.8
> 156.8
> 162.45
> 162.45
> 162.45 180 180
> 198.45
> 204.8
> 204.8
> 224.45
> 231.2
> 231.2
> 231.2
> 231.2
> 238.05
> 238.05
> 259.2 320 320
> 328.05
> 344.45
> 352.8
> 352.8
> 361.25
> 369.8
> 387.2
> 387.2
> 423.2
> 423.2
> 432.45
> 451.25
> 460.8
> 470.45
> 470.45
> 490.05
> 490.05
有人有想法吗?
最佳答案
要生成具有所需分布的随机数,可以使用 Smirnov 变换 ( inverse sampling )。
要获得抛物线分布,只需对范围 0..1 使用均匀随机生成器并应用平方根。示例应生成 0..100 范围内的值,并且靠近末端的密度更大。
for (let i = 0; i < 20; i++) {
let x = Math.floor(50 * (Math.pow(Math.Random(), 0.5));
if (Math.Random() < 0.5)
x = 50 - x
else
x = 50 + x;
...
}
关于javascript - 获取随机数并关注限制(抛物线),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52481830/