奇异值是一种在矩阵分解中经常用到的概念。它们是从方阵的特征向量和特征值得到的。要计算一个矩阵A的奇异值,首先需要对矩阵进行正交化处理,然后对结果进行归一化处理,最后将结果平方并取根号即可得到奇异值。这个过程通常使用了SVD(奇异值分解)的 *** 来实现。
1、奇异值分解:
设 \( A \) 为 \( m \times n \) 阶复矩阵,则存在 \( U \) 和 \( V \) 是 \( m \times m \) 和 \( n \times n \) 的酉矩阵,以及对角矩阵 \( S = \text{diag}(\sigma_i, \sigma_{2}, \ldots, \sigma_r) \),\( \sigma_i > 0 \) ( \( i = 1, \ldots, r \)),且 \( r = \text{rank}(A) \)。
则有:
\[
A = U S V'
\]
2、推论:
对于实矩阵 \( A \),存在 \( U \) 和 \( V \) 是 \( m \times m \) 和 \( n \times n \) 的正交矩阵,以及对角矩阵 \( S = \text{diag}(\sigma_i, \sigma_{2}, \ldots, \sigma_r) \),\( \sigma_i > 0 \) ( \( i = 1, \ldots, r \)),且 \( r = \text{rank}(A) \)。
则有:
\[
A = U S V'
\]
3、说明:
- 奇异值分解非常有用,因为它提供了矩阵 \( A \) 的信息,例如非零奇异值的数量(\( S \) 的阶数)和矩阵 \( A \) 的秩相同。
- 如果矩阵 \( A \) 的秩 \( r \) 确定,\( U \) 的前 \( r \) 列构成了矩阵 \( A \) 的列向量空间的正交基。
在 MATLAB 中进行奇异值分解:
- 函数svd
返回矩阵 \( A \) 的奇异值向量。
- 函数[U, S, V] = svd(A)
返回一个与 \( A \) 同大小的对角矩阵 \( S \),两个酉矩阵 \( U \) 和 \( V \),满足 \( A = U S V' \),\( A \) 是 \( m \times n \) 矩阵,则 \( U \) 是 \( m \times m \) 矩阵,\( V \) 是 \( n \times n \) 矩阵。
MATLAB 特殊功能:
- 函数svd
可以生成矩阵 \( A \) 的“经济型”分解,只计算出矩阵 \( U \) 的前 \( n \) 列和 \( n \times n \) 的 \( S \)。
- “经济型”分解节省存储空间。
奇异值分解的主要应用包括主成分分析(PCA),这是一种数据分析 *** ,用于找出大量数据中所隐含的“模式”,PCA 可以通过找到数据集中的主要方向来减少维度,并使用这些方向来表示原始数据。
在很长时间内,奇异值分解无法实现并行处理,直到 Google 中国的张智威博士和他的团队开发了奇异值分解的并行算法,这是一项重要的技术创新。