有人知道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中奇异向量的符号。
答案 0 :(得分:0)
Matlab使用LAPACK的DGESVD实现进行奇异值分解,但不考虑所得矢量的方向。在应用程序中,当执行SVD时,处理分解的数据,然后重建数据,返回符号没有区别。当分析分解的数据时,它们变得非常重要。
在使用Matlab执行SVD后,可能会应用符号校正算法。但我相信符号修正取决于数据的实际含义。
在论文中,您提供的方向选择与大多数数据点相同。这对于具有对称分布的数据不起作用,因为理论方向为零,样本方向将是随机的,导致高数值不稳定性。
如果目标只是为了获得解的数值稳定性,那么选择一些向量并将所有SVD向量改变为与它位于相同的半空间就足够了。