奇异值
矩形矩阵 A 的
奇异值
和对应的
奇异向量
分别为满足以下条件的标量 σ 以及一对向量 u 和 v
其中
A
H
是 A 的埃尔米特转置。奇异向量 u 和 v 通常缩放至范数为 1。此外,如果 u 和 v 均为 A 的奇异向量,则 -u 和 -v 也为
A
的奇异向量。
奇异值 σ 始终为非负实数,即使 A 为复数也是如此。对于对角矩阵 Σ 中的奇异值以及构成两个正交矩阵 U 和 V 的列的对应奇异向量,方程为
由于 U 和 V 均为单位矩阵,因此将第一个方程的右侧乘以
V
H
会生成奇异值分解方程
m×n 矩阵的完整奇异值分解涉及:
m×m 矩阵 U
m×n 矩阵 Σ
n×n 矩阵 V
换句话说,U 和 V 均为方阵,Σ 与 A 的大小相同。如果 A 的行数远多于列数 (
m > n
),则得到的
m
×
m
矩阵 U 为大型矩阵。但是,U 中的大多数列与 Σ 中的零相乘。在这种情况下,
精简
分解可通过生成一个 m×n U、一个 n×n Σ 以及相同的 V 来同时节省时间和存储空间:
特征值分解是分析矩阵(当矩形表示从向量空间到其自身的映射时)的合适工具,就像分析常微分方程一样。但是,奇异值分解是分析从一个向量空间到另一个向量空间(可能具有不同的维度)的映射的合适工具。大多数联立线性方程组都属于这第二类。
如果 A 是方形的对称正定矩阵,则其特征值分解和奇异值分解相同。但是,当 A 偏离对称性和正定性时,这两种分解之间的差异就会增加。特别是,实矩阵的奇异值分解始终为实数,但非对称实矩阵的特征值分解可能为复数。
对于示例矩阵
完整的奇异值分解为
[U,S,V] = svd(A)
-0.6105 0.7174 0.3355
-0.6646 -0.2336 -0.7098
-0.4308 -0.6563 0.6194
14.9359 0
0 5.1883
0 0
-0.6925 0.7214
-0.7214 -0.6925
可以验证
U*S*V'
在舍入误差界限内是否等于
A
。对于此类小问题,精简分解只是略小一些。
[U,S,V] = svd(A,"econ")
-0.6105 0.7174
-0.6646 -0.2336
-0.4308 -0.6563
14.9359 0
0 5.1883
-0.6925 0.7214
-0.7214 -0.6925
同样,
U*S*V'
在舍入误差界限内等于
A
。
分批 SVD 计算
如果需要分解一个由大小相同的矩阵组成的大型矩阵集合,则用
svd
在循环中执行所有分解是低效的。在这种情况下,您可以将所有矩阵串联成一个多维数组,并使用
pagesvd
通过一次函数调用对所有数组页执行奇异值分解。
函数
用法
pagesvd
使用
pagesvd
对多维数组的页执行奇异值分解。这是对大小相同的矩阵组成的大型集合执行 SVD 的高效方法。
例如,假设有一个包含三个 2×2 矩阵的集合。使用
cat
函数将这些矩阵串联成一个 2×2×3 数组。
现在,使用
pagesvd
同时执行三个分解。
对于
X
的每页,输出
U
、
S
和
V
中都有对应的页。例如,矩阵
A
位于
X
的第一页上,其分解由
U(:,:,1)*S(:,:,1)*V(:,:,1)'
给出。
低秩 SVD 逼近
对于大型稀疏矩阵,使用
svd
计算
所有
奇异值和奇异向量并不始终可行。例如,如果您只需知道几个最大的奇异值,那么计算一个 5000×5000 稀疏矩阵的所有奇异值会带来额外的工作。
在只需要一部分奇异值和奇异向量的情况下,
svds
和
svdsketch
函数优先于
svd
。
函数
用法
svds
使用
svds
计算 SVD 的 k 秩逼近。您可以指定一部分奇异值应为最大值、最小值还是最接近特定数字的值。
svds
通常计算最可能的 k 秩逼近。
svdsketch
使用
svdsketch
计算输入矩阵的满足指定容差的部分 SVD。
svds
要求您指定秩,而
svdsketch
根据指定的容差以自适应方式确定矩阵草图的秩。
svdsketch
最终使用的 k 秩逼近满足容差,但不同于
svds
,它无法保证是最佳的。
例如,假设有一个密度约为 30% 的 1000×1000 随机稀疏矩阵。
n = 1000;
A = sprand(n,n,0.3);
最大的六个奇异值为
S = svds(A)
130.2184
16.4358
16.4119
16.3688
16.3242
16.2838
此外,最小的六个奇异值为
S = svds(A,6,"smallest")
0.0740
0.0574
0.0388
0.0282
0.0131
0.0066
对于可作为满矩阵
full(A)
载入内存的较小矩阵,使用
svd(full(A))
的速度可能仍快于使用
svds
或
svdsketch
。但对于确实很大的稀疏矩阵,就有必要使用
svds
或
svdsketch
。
另请参阅
svd
|
svds
|
svdsketch
|
gsvd
|
pagesvd
相关主题
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window.
Web browsers do not support MATLAB commands.
Close