生成两组数字,其中每组的总和和它们的点积之和为N.

时间:2014-10-15 18:27:57

标签: r algorithm math sum

在这个问题Getting N random numbers that the sum is M中,对象是生成一组随机数,它们总和为特定数字N。在阅读完这个问题之后,我开始尝试生成满足这个条件的数字集

sum(A) == sum(B) && sum(B) == sum(A * B)

这方面的一个例子是

A <- c(5, 5, -10, 6, 6, -12)
B <- c(5, -5, 0, 6, -6, 0)

在这种情况下,三个总和等于零。显然,这些集合不是随机的,但它们满足条件。有没有办法生成满足上述条件的“随机”数据集? (与使用上述示例中的一些算法相反。)

(注意:我将此标记为R问题,但语言对我来说无关紧要。)

2 个答案:

答案 0 :(得分:1)

您可以完全随机生成一组。并且随机生成集合B中的所有数字,除了两个数字。由于你有两个方程,你应该能够解决这两个数。

答案 1 :(得分:1)

您需要在n维空间中定义第一个向量,第二个向量将具有N-2个自由度(即随机数),因为已经确定了和和一个角度。 第二个向量需要转换为N维空间;有无数的变换可以工作,所以如果你不关心结果向量的概率分布,只需选择一个对你来说最直观的变换。 对第一个约束有一个很好的几何解释:它将第二个向量约束到N维空间中的(超)平面;第二个约束没有简单的几何解释。 看看hyperspherical cooridnates