我有一个真正的方阵我需要对其执行奇异值分解。现在,执行操作
作为和是正交的,我们知道并且是非负的,因为奇异值是非负的。
现在,我需要知道和行列式的符号(当然,这与知道行列式相同)。然而,天真的方法花费了我
我想知道是否有人知道一种方法
- 和的行列式的符号推断为SVD 实现或 Python 中的类似库的双积,而无需调用and 。
numpyscipydet(U)det(V) det(U)基于是正交的事实,计算比 的默认实现更快的正交矩阵的行列式。
我有一个真正的方阵我需要对其执行奇异值分解。现在,执行操作
作为和是正交的,我们知道并且是非负的,因为奇异值是非负的。
现在,我需要知道和行列式的符号(当然,这与知道行列式相同)。然而,天真的方法花费了我
我想知道是否有人知道一种方法
numpyscipydet(U)det(V)det(U)基于是正交的事实,计算比 的默认实现更快的正交矩阵的行列式。如果您准备在 fortran 代码中进行挖掘:
SVD算法由几个部分组成:
符号说明,我将 SVD 写为。
反射器通常具有行列式 -1,因此应用一个将改变行列式的符号。一个小细节,LAPACK 有时会“作弊”并使用微不足道的旋转而不是反射器,这是如果特定列已经减少了。要在第一步之后计算行列式,只需计算和的非平凡反射器的数量。如果有个非平凡反射器,则行列式是。
旋转具有行列式 1,因此应用一个不会改变行列式的符号。因此,我们不需要考虑步骤 2 中的计算。
中的对应列乘以-1这也再次行列式的符号。因此,与反射器类似,我们需要计算符号变化的数量才能使行列式达到这一点。
要重新排序奇异值,我们还需要重新排序和,每次交换都会改变行列式的符号。同样,我们计算掉期的数量。
我可能错过了一些细节,我对特征值求解器比专门的 svd 程序更熟悉。
第 1 部分:据我所知,答案是否定的。
对于第 2 部分:这个问题有几个很好的答案,所有答案都是否定的(实际上没有更快的方法)。我不相信有关于这个话题的有意义的新文献。