Java中是否有一种方法可以按照固定的均值和标准差生成随机数?

问题描述 投票:0回答:1

问题

我知道如何生成一定范围内的随机数,但不遵循固定的均值和标准差。

我还希望将这些值限制在一定范围内(我知道这意味着结果将不会是具有标准偏差的真实高斯分布,而是修剪后的高斯分布)]

上下文

我想回答的更广泛的问题是

假设您有一个黑匣子,每10秒会发出一只猴子,猴子的高度在24到36英寸之间。的高度半小时以上产生的猴子遵循正态分布平均30.5英寸,标准差2.5。虽然有另一个房间中的盒子,如果猴子的高度低于此高度,猴子就会消失28英寸,每20秒发生一次。编写程序进行计算n天后留在房间中的猴子的数量(n是用户输入)。出于逻辑考虑,假设房间足够大容纳无数的猴子,他们有食物。

java random normal-distribution
1个回答
0
投票

作为VGR mentioned,在他们的注释中,您可以使用Random.nextGaussian()生成平均值为零且标准偏差为1的高斯分布随机数。您可以通过添加该值来影响平均值,并通过相乘来影响标准偏差。因此,您可以一起使用自己喜欢的属性生成随机数。您想要

desiredMean + desiredStandardDeviation * Random.nextGaussian()

您已经提出了另外一个要求,即值必须在一个范围内,只需重新滚动一个新值,直到获得该范围内的值,就可以轻松实现。


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σ范围内,因此猴子的身高在24到36之间。

© www.soinside.com 2019 - 2024. All rights reserved.