You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

关于生成(N-1)维空间中等距分布的N个单纯形顶点坐标的技术问询

关于生成(N-1)维空间中等距分布的N个单纯形顶点坐标的技术问询

嘿,这个问题挺有意思的——咱们先把已知的例子理清楚,再一步步推通用解法,顺便聊聊你说的递推思路怎么优化。

首先先明确你给出的低维等距点集(都是正则单纯形的顶点):

  • 1维空间(N=2)的2个等距点:(1), (-1),对应线段
  • 2维空间(N=3)的3个等距点:(0, 2), (1.732, -1), (-1.732, -1)(注:1.732是√3的近似值),对应等边三角形
  • 3维空间(N=4)的4个等距点:(1,1,1), (1,-1,-1), (-1,1,-1), (-1,-1,1),对应正四面体

先解决你的第一个小问题:4维空间的5个等距点

用递推思路从3维的点集扩展的话,我们可以这么做:

  1. 把3维的4个点都加一个0分量,变成4维点:(1,1,1,0), (1,-1,-1,0), (-1,1,-1,0), (-1,-1,1,0)
  2. 找一个新点,让它到这4个点的距离都等于原来的两两距离(也就是2√2)。计算后得到这个点可以是(0,0,0,√5)(或者(0,0,0,-√5)

现在这5个点两两之间的距离都是2√2,完全符合要求。

通用生成方法(一步到位,无需递推)

如果要生成任意N≥2时,(N-1)维空间里的N个等距点,有个直接的公式可以一步构造,效率很高:

我们可以构造中心在原点的正则单纯形顶点,步骤如下:

  1. 第1个点:(1, 0, 0, ..., 0)(共N-1个分量)
  2. 第k个点(2≤k≤N):第1个分量为-1/(N-1),第k-1个分量为√(N/(N-1)),其余分量为0

这个构造出来的点两两距离相等,你可以验证低维情况:

  • N=3时,点是(1,0), (-1/2, √(3/2)), (-1/2, -√(3/2)),两两距离都是√3,和用户的例子只是缩放和平移的区别,本质一致。

关于你提到的递推思路:其实并不慢

你说的从低维到高维逐步找下一个点的思路是可行的,而且可以写成代码快速实现,根本不“慢”。核心优化后的步骤是:

  1. 假设已经有了m维空间中的m+1个等距点(中心在原点),把每个点都加一个0分量,扩展到m+1维空间。
  2. 新增点的坐标是(0, 0, ..., 0, c),其中c是常数,满足c² = d² - R²——这里d是原来点的两两距离,R是原来点的模长。
  3. 因为原来的点是中心在原点的正则单纯形,所以R² = (m * d²) / (2*(m+1)),代入后就能算出c的值。

比如从3维到4维的例子,d=2√2,R=√3,所以c² = 8 - 3 =5,c=√5,和之前的结果一致。

这种递推方式每一步只需要计算一个常数,然后扩展坐标,代码实现起来非常高效,完全不用担心速度问题。

备注:内容来源于stack exchange,提问作者porente

火山引擎 最新活动