我知道如何生成均值和标准差固定的随机数。
我还希望将这些值限制在一定范围内(我知道这意味着结果将不是真实的高斯分布,而是经过裁剪的高斯分布)
我要回答的更广泛的问题是
假设您有一个黑匣子,每10秒发出一只猴子, 猴子的高度在24到36英寸之间。的高度 半小时以上产生的猴子遵循正态分布 平均30.5英寸,标准差2.5。虽然有另一个 房间中的盒子,如果猴子的高度低于此高度,猴子就会消失 28英寸,每20秒发生一次。编写程序进行计算 n天后留在房间中的猴子的数量(n是用户 输入)。出于逻辑考虑,假设房间足够大 容纳了无数的猴子,他们有食物。
答案 0 :(得分:0)
正如VGR mentioned在其评论中一样,您可以使用Random.nextGaussian()生成高斯分布的随机数,其均值为零,标准偏差为1。您可以通过将该值加和来影响均值并影响乘以标准偏差。因此,您可以一起使用自己喜欢的属性生成随机数。你想要
desiredMean + desiredStandardDeviation * Random.nextGaussian()
您还提出了另外一个要求,即值必须在一个范围内,只需重新滚动一个新值,直到获得该范围内的值,就可以轻松实现。
答案 1 :(得分:0)
nextGaussian()方法返回均值为0且标准偏差为1的随机数。
这意味着nextGaussian()返回的数字将趋向于“聚集”在0附近,并且(大约)70%的值将在-1和1之间。基于nextGaussian()返回的值,您可以缩放并移动它们以获得其他正态分布:
要更改分布的平均(平均),请添加所需的 值;
要更改标准偏差,请乘以该值。
示例: 生成平均值为500且标准偏差为100的值:
double val = r.nextGaussian() * 100 + 500;
生成平均值为30.5且标准偏差为2.5的值:
double val = r.nextGaussian() * 2.5 + 30.5;
其中70%的值介于28和33之间。由于99.7%的值位于3-sigma范围内,因此猴子的身高介于24和36之间。