生成N个随机数,使它们的总和为一个常数K - Excel

17

我该如何在Excel中生成这些数字。

我需要生成8个随机数字,它们的总和始终为320。我大约需要100组左右。 可以参考这里,其中介绍了两种方法。

或者有其他的方法在Excel中实现。


所以显然你已经有了那个算法。你的问题是什么? - njzk2
我该如何在Excel中完成它?此外,我无法理解。 - sakkthi
生成7个随机数,第8个使用=320-sum(A1:A7),其中A1:A7为前7个随机数。 - Dmitry Pavliv
3个回答

36

您可以使用RAND()函数在A列生成N个数字(在这种情况下是8个数字)。

然后,在B列中,您可以使用以下公式:B1=A1/SUM(A:A)*320B2=A2/SUM(A:A)*320等等(其中320是您感兴趣的总和)。

因此,您只需在A1中输入=RAND(),然后将其向下拖动到A8。然后在B1中输入=A1/SUM(A:A)*320,并将其拖到B8。现在,B1:B8包含8个随机数,它们的总和为320。

示例输出:

图片描述


5
如果这很重要的话,这并不会产生均匀分布。 - n1000
如果您想将小数位数限制为2位,该怎么办? - Alfie Robles

3

我来晚了 - 不过,如果只需要整数,则:

=LET(x_,RANDARRAY(8,1,1,1000000,1),y_,ROUND(x_*320/SUM(x_),0),y_) 

与上面的喜爱解决方案有些相似,尽管简约(需要在单个单元格中使用公式来生成所需数组,没有帮助列)。也解决了不重要的小数点问题,尽管您可能需要重新分配因偶然四舍五入误差而导致的赤字/盈余,这可能会产生总和为321或319。可以再次随机地使用类似于上面公式中的index(y_,randbetween(1,8))+320-sum(y_)的东西执行此操作 - 或者诉诸臭名昭著的辅助函数..

有人评论说上面的喜爱解决方案(因为它源自类似的概念/方法)不均匀 - 我不确定是否需要这样;均匀分布将妨碍随机性质(并且可以说要简单得多,因为您只需将一个大范围划分为不同的八分之一,并遵循已经在此处阐述的相同方法 - 不确定随意/机械地“强制”随机分布采用某种非随机分布的想法来自何处/为什么..无论如何...我显然没有正确阅读问题(咳咳)。


3

我有点晚了 - 但是如果只需要整数,则:

=LET(x_,RANDARRAY(8,1,1,1000000,1),y_,ROUND(x_*320/SUM(x_),0),y_) 

这种解决方案与上面的最爱解决方案有些相似,虽然很简洁(只需要在单元格中使用公式即可生成所需的数组,不需要任何帮助列)。但它也解决了小数点问题,尽管由于偶发的舍入误差可能导致总和为321或319,因此您可能需要分配回赤字/盈余。您可以再次随机使用类似于上述公式中的index(y_,randbetween(1,8))+320-sum(y_)的东西 - 或者诉诸于臭名昭著的helper fn ..


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接