奇异向量 ind matlabsvd 函数的符号确定

use*_*022 5 matlab svd

有谁知道Matlab函数产生的奇异向量的符号svd是如何确定的?

让:

B = U*S*V'

svd是实数或复数 2×2 矩阵 B 的有效分解,则:

B = (U*c)*S *(V*c)'

也是有效的,其中c是一个改变一个或两个奇异向量符号的矩阵:

c = diag([1 -1]), diag([-1 1]) or diag([-1 -1])

我想知道Matlab的svd算法如何确定U和V中奇异向量的符号。

div*_*nov 0

Matlab 使用 LAPACK 的 DGESVD 实现进行奇异值分解,该实现不考虑结果向量的方向。在应用中,执行 SVD 时,先处理分解的数据,然后重构数据,后向符号没有区别。仅当分析分解的数据时,它们才变得重要。

使用 Matlab 执行 SVD 后,可以应用符号校正算法。但我相信符号校正取决于数据的实际含义。

在您提供的论文中,选择的方向与大多数数据点相同。这不适用于对称分布的数据,因为理论方向为零并且样本方向是随机的,导致数值高度不稳定。

如果目标只是获得解的数值稳定性,那么选择某个向量并将所有 SVD 向量更改为与其位于同一半空间中就足够了。