gre*_*ech 2 javascript math vector vector-graphics
给定一个五维空间,我想生成 100 个向量,所有向量都具有固定的幅度 = M,其中分量值是随机分布的。
我最初想从一个单位向量开始,然后应用一个旋转矩阵,10 个自由度的随机参数......这行得通吗?如何?
在Javascript中这样做的任何好方法......?
欢呼任何指针!
这是我将使用的蒙特卡洛算法(我不太了解 Javascript,无法在我的头脑中编写代码):
为五个维度中的每一个生成 -1 到 1 范围内的随机值。
计算幅度 M,如果 M=0 或 M>1,则拒绝这些值并返回到步骤 #1。
将向量归一化为 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