【问题标题】:sign determination of singular vectors ind matlabs svd functionmatlab svd函数中奇异向量的符号确定
【发布时间】:2014-06-21 16:46:10
【问题描述】:

有人知道如何确定 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中奇异向量的符号的。

【问题讨论】:

  • 没有向量符号这样的东西。唯一可能有符号的是标量,例如,将一个向量投影到另一个向量。您的问题是关于将所有向量更改为位于同一个半空间中吗?
  • 我的问题是关于众所周知的 svd 分解的符号歧义 (see here for an example)

标签: matlab svd


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2016-10-16
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    • 2015-06-17
    • 2011-05-12
    相关资源
    最近更新 更多