生成给定幅度的随机 5d 矢量

gre*_*ech 2 javascript math vector vector-graphics

给定一个五维空间,我想生成 100 个向量,所有向量都具有固定的幅度 = M,其中分量值是随机分布的。

我最初想从一个单位向量开始,然后应用一个旋转矩阵,10 个自由度的随机参数......这行得通吗?如何?

在Javascript中这样做的任何好方法......?

欢呼任何指针!

RBa*_*ung 6

这是我将使用的蒙特卡洛算法(我不太了解 Javascript,无法在我的头脑中编写代码):

  1. 为五个维度中的每一个生成 -1 到 1 范围内的随机值。

  2. 计算幅度 M,如果 M=0 或 M>1,则拒绝这些值并返回到步骤 #1。

  3. 将向量归一化为 1 的 Magnitude(将每个维度除以 M)。

这应该会给你随机单位向量均匀分布在 5 维超球体表面。


有人问过这个问题:“如果 M>1,为什么要拒​​绝向量?”

答案:这样最终向量将均匀分布在单位 5 球体的表面上。

推理: 我们在第一步中生成的是一组均匀分布在单位 5 立方体的体积内的随机向量。其中一些向量也在单位 5 球体的体积内,其中一些在该体积之外。如果归一化,则 5 球体内的向量在其表面上均匀分布,但是,其外部的向量根本不是均匀分布的。

可以这样想:就像普通的 3 维单位立方体和单位球体,甚至单位正方形和单位圆一样,单位 5-球体完全包含在单位 5-立方体中,它只接触到五个正单位维度轴点:

(1,0,0,0,0)
(0,1,0,0,0)
(0,0,1,0,0)
(0,0,0,1,0)
(0,0,0,0,1)
Run Code Online (Sandbox Code Playgroud)

以及它们对应的负单位轴点。这是因为这些是立方体表面上大小(距原点的距离)为 1 的唯一点,在所有其他点上,5 立方体的表面距原点的距离大于1。

这意味着 (0,0,0,0,0) 和 (1,1,1,1,1) 之间的点比 (0,0,0,0,0) 和 ( 1,0,0,0,0)。事实上关于 SQRT(5) 或 aprx。2.25 倍。

这意味着,如果您将所有向量包含在单位 5 立方体中,那么最终“随机”映射到 (0.44,0.44,0.44,0.44,0.44) 的结果将是到 (1 ,0,0,0,0)。


对于那些挑战(没有基础,恕我直言)这会导致 5-D 球体表面均匀分布的人,请参阅此维基百科文章部分中的替代方法:https : //en.wikipedia.org/wiki /N-sphere#Uniformly_at_random_on_the_(n_%E2%88%92_1)-sphere

  • 问题是所描述的拒绝方案是可行的,但是因为它是一个拒绝方案,所以在您在 5 维单位球内找到一个点之前可能需要一些备用样本。这可能看起来并不重要,但这里拒绝的概率相当大,因为 83.5% 的样本将被拒绝为单位球外。 (3认同)