有谁知道 Matlab 的 svd
函数产生的奇异向量的符号是如何确定的?
让:
B = U*S*V'
是实数或复数 2×2 矩阵 B 的有效 svd
分解,则:
B = (U*c)*S *(V*c)'
也是有效的,其中 c
是一个改变一个或两个奇异向量符号的矩阵:
c = diag([1 -1])、diag([-1 1]) 或 diag([-1 -1])
。
我想知道 Matlab 的 svd
算法如何确定 U 和 V 中奇异向量的符号。
最佳答案
Matlab 使用 LAPACK 的 DGESVD 实现进行奇异值分解,它不考虑生成向量的方向。在应用程序中,执行 SVD 时,处理分解的数据,然后重建数据,反符号没有区别。只有在分析分解数据时,它们才变得重要。
在用 Matlab 执行 SVD 后,可能会应用符号校正算法。但我相信符号修正取决于数据的实际含义。
在您提供的论文中,选择的方向与大多数数据点相同。这不适用于对称分布的数据,因为理论方向为零并且样本方向将是随机的,从而导致高数值不稳定性。
如果目标只是获得解的数值稳定性,那么选择一些向量并将所有 SVD 向量更改为与其位于相同的半空间中就足够了。
关于matlab - matlab svd函数中奇异向量的符号确定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23471522/