r - 生成两组数字,其中每组数字之和及其点积之和为 N

标签 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 问题,但语言对我来说真的不重要。)

最佳答案

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

关于r - 生成两组数字,其中每组数字之和及其点积之和为 N,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26389560/

相关文章:

r - 不使用 data.frame 的数值透明查找表?

r - 单击底部后,在 Shiny 中运行自己的功能

algorithm - 合并具有未知排序函数的数据

math - 获取旋转矩形的边界

algorithm - 如何使用后缀求解一个简单的线性方程

r - 在 R 中的两个数据帧之间更改值

sql - 如何在我的 R 数据框中更改/清理此特定行值 [数据类型字符串]

algorithm - n 个字符串的最长公共(public)前缀

arrays - 算法 - 在未排序的数组中找到具有最小距离的两个数字的最大总和

c - C中的递增和递减运算符