matlab svd函数中奇异向量的符号确定

时间:2014-05-05 11:38:30

标签: matlab svd

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

让:

B = U*S*V'

是真实或复杂的2乘2矩阵B的有效svd分解,然后:

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

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

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

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

1 个答案:

答案 0 :(得分:0)

Matlab使用LAPACK的DGESVD实现进行奇异值分解,但不考虑所得矢量的方向。在应用程序中,当执行SVD时,处理分解的数据,然后重建数据,返回符号没有区别。当分析分解的数据时,它们变得非常重要。

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

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

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