【问题标题】:Efficient Calculation of an N-Dimensional Cross Product?高效计算 N 维叉积?
【发布时间】:2013-05-10 00:36:03
【问题描述】:

根据标题,仅使用行列式定义和使用 LU 分解方法来计算 n 维叉积的最佳方法是这样做,还是你们能推荐一个更好的方法?

谢谢

编辑:为了清楚起见,我的意思是 http://en.wikipedia.org/wiki/Cross_product 而不是笛卡尔积

编辑:使用莱布尼茨公式似乎也可能有所帮助——尽管我不知道这与 LU Decomp 相比如何。在这一刻。

【问题讨论】:

  • 你不想要大 N 的莱布尼茨公式——它很快就会变得昂贵!对于N>4,LU分解法大概是要走的路。
  • 你所说的“交叉产品”到底是什么意思?您引用的维基百科文章陈述了一个七维,然后说“在一般维度中,没有直接类似的二进制叉积可以专门产生一个向量”。你的意思是楔形产品还是别的什么?
  • @MvG 是的,抱歉,我想是楔形产品?我的意思是这部分“。另外,使用方向和度量结构,就像传统的 3 维叉积一样,可以在 n 维中取 n - 1 个向量的乘积来产生一个垂直于所有这些向量的向量。但是如果该产品仅限于具有矢量结果的非平凡二元产品,它仅存在于三维和七维中。”特别是假设它存在的 n-1 个向量的乘积 - 你怎么知道它是否仅限于非平凡的二元乘积?例如。支票?
  • “二元积”意味着您需要一个将两个向量作为输入的操作,而不是您提到的 $n-1$ 个向量。 “非平凡”意味着它不会简单地“计算”独立于其输入的空向量。楔积也是二进制的。你关心结果的长度,还是只关心它的正交性?如果是后者,那么您只是在寻找由输入向量形成的 $(n-1)\times n$ 矩阵的 kernel 的(一个元素)。有多种方法可以计算该内核,例如使用 Lapack。

标签: math optimization vector cross-product


【解决方案1】:

从您的评论来看,您似乎正在寻找一个以 n −1 个向量作为输入并计算单个向量作为其结果的操作,该向量将与所有输入向量正交,并且可能也有明确定义的长度。

定义长度

您可以使用标识 v ∙ 来表征 3 维叉积 v =a ×b w =det(a,b,w)。换句话说,取输入向量的叉积,然后用 any 其他向量 w 计算 dot product 与插入输入向量和其他向量相同成一个矩阵并计算其determinant

这个定义可以是generalized to arbitrary dimensions。由于可以使用Laplace expansion 沿最后一列计算行列式的方式,该叉积的结果坐标将是所有 (n −1)×(n −1) 可以从输入向量形成的子行列式,带有交替符号。所以是的,Leibniz 在理论上可能有用,尽管它几乎不适合实际计算。在实践中,您很快就会想办法避免在computing these n determinants 时重复计算。但是等待这个答案的最后一部分......

只是方向

但是,大多数应用程序都可以满足较弱的要求。他们不关心结果向量的长度,而只关心它的方向。在这种情况下,您需要的是 (n −1)×n 矩阵的kernel,您可以通过将输入向量作为行来形成。该内核的任何元素都将与输入向量正交,并且由于计算内核是一项常见任务,因此您可以构建很多 existing implementations,例如Lapack。详细信息可能取决于您使用的语言。

结合这些

您甚至可以结合上述两种方法:计算内核的一个元素,对于该向量的非零条目,还可以计算相应的 (n −1)×(n −1) 行列式,它将使用第一种方法为您提供单个坐标。然后,您可以简单地缩放矢量,使所选坐标达到计算值,并且所有其他坐标都将匹配该坐标。

【讨论】:

    猜你喜欢
    • 2010-09-19
    • 2011-02-01
    • 2020-03-21
    • 2010-09-27
    • 2014-11-10
    • 1970-01-01
    • 2021-08-01
    • 1970-01-01
    • 2022-06-25
    相关资源
    最近更新 更多