高效计算N维叉积?

3
根据标题,计算n维叉积的最佳方法是否仅使用行列式定义并使用LU分解方法,或者您能建议更好的方法吗?
谢谢
编辑:为了清晰起见,我指的是http://en.wikipedia.org/wiki/Cross_product而不是笛卡尔积
编辑:似乎使用莱布尼兹公式可能有帮助-虽然我目前不知道它与LU分解的比较。

3
你不希望使用针对大 N 的莱布尼茨公式,因为它会非常快地变得昂贵!对于 N>4,LU分解方法可能是更好的选择。 - comingstorm
1
你所说的“叉积”是什么意思?你引用的维基百科文章提到了七维的叉积,然后说“在一般的维度中,没有直接类比于二元叉积的东西可以特别地产生一个向量”。你是指楔积还是其他什么? - MvG
@MvG,抱歉,我是指楔积,我想是吧?我指的是这部分“。此外,使用方向和度量结构,就像传统的三维叉积一样,在n维中可以取n-1个向量的积以产生垂直于它们所有的向量的向量。但是,如果将积限制为具有向量结果的非平凡二元积,则仅存在于三维和七维中。”具体而言,是n-1个向量的积(假设存在)-还有如何知道它是否仅限于非平凡二元积?例如一个检查? - Eiyrioü von Kauyf
“二元积”意味着您需要一个将两个向量作为输入的操作,而不是您提到的$n-1$个向量。“非平凡”意味着它不会仅独立于其输入“计算”零向量。楔积也是二元的。您关心结果的长度吗,还是只关心它的正交性?如果是后者,则您只需寻找(元素)的$(n-1)\times n$矩阵由输入向量形成。有多种方法可以计算该核,例如使用Lapack。 - MvG
1个回答

4
从您的评论中,似乎您正在寻找一种操作,该操作将n - 1个向量作为输入,并计算一个向量作为其结果,该向量将与所有输入向量正交,并且可能具有定义良好的长度。

带有定义长度

您可以使用恒等式v = a × b 来表征三维叉积v,其中vw = det(a,b,w)。换句话说,对输入向量进行叉积,然后计算与任何其他向量w点积相同,就像将输入向量和该其他向量插入矩阵并计算其行列式一样。

这个定义可以推广到任意维度。由于行列式可以使用Laplace expansion沿着最后一列计算,因此叉积的结果坐标将是从输入向量中可以形成的所有(n −1)×(n −1)子行列式的值,交替带符号。所以,理论上莱布尼兹可能有用,但实际上它几乎不适用于现实世界的计算。在实践中,您很快就会想出避免重复计算n个行列式的方法。但请等待本答案的最后部分...
大多数应用程序只需要较弱的要求。它们不关心生成向量的长度,而只关心其方向。在这种情况下,您所要求的是通过将输入向量作为行形成的(n −1)×n矩阵的。该核的任何元素都将与输入向量正交,由于计算核是一项常见任务,因此您可以建立在许多现有 实现上,例如Lapack。细节可能取决于您使用的语言。
你甚至可以将上述两种方法结合起来:计算核的一个元素,对于该向量的非零条目,还可以使用第一种方法计算相应的(n −1)×(n −1)行列式,从而得到该单个坐标。然后,您可以简单地缩放向量,使所选坐标达到计算值,并且所有其他坐标将与该坐标匹配。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接