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

标签 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]) 或 diag([-1 -1])

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

最佳答案

Matlab 使用 LAPACK 的 DGESVD 实现进行奇异值分解,它不考虑生成向量的方向。在应用程序中,执行 SVD 时,处理分解的数据,然后重建数据,反符号没有区别。只有在分析分解数据时,它们才变得重要。

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

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

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

关于matlab - matlab svd函数中奇异向量的符号确定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23471522/

相关文章:

r - 通过 QR 分解、SVD(和 Cholesky 分解?)计算投影/帽子矩阵

python - 在 Python 中查找对称矩阵的 SVD

c++ - 与 MATLAB 相比,使用 cuSolver 时 SVD 非常慢

matlab - 梯度下降代码的向量化

arrays - 根据特定规则挑选数组的元素

arrays - Matlab 将向量转换为二进制矩阵

opencv - 我如何计算 SVD 并验证第一个奇异值与最后一个奇异值的比率是否与 OpenCV 一致?

matlab - 涉及逆运算的矩阵乘法 : getting infinity

matlab - MATLAB 中单个图形的多个眼图

r - 在 R 中使用多核计算 SVD