目录
gsvd函数的功能是用于计算广义奇异值分解(Generalized Singular Value Decomposition,GSVD)。
语法
[U,V,X,C,S] = gsvd(A,B)
[U,V,X,C,S] = gsvd(A,B,"econ")
[U,V,X,C,S] = gsvd(A,B,0)
sigma = gsvd(A,B)
说明
[U,V,X,C,S] = gsvd(A,B) 执行矩阵 A 和 B 的广义奇异值分解,并返回酉矩阵 U 和 V、矩阵 X 以及非负对角矩阵 C 和 S,使得
A = U*C*X'
B = V*S*X'
C'*C + S'*S = I
[U,V,X,C,S] = gsvd(A,B,"econ")(其中 A 为 m×p 且 B 为 n×p)生成精简分解,其中生成的 U 和 V 矩阵最多有 p 列,C 和 S 最多有 p 行。
[U,V,X,C,S] = gsvd(A,B,0) 与 gsvd(A,B,"econ") 相同。不建议使用此语法。改用 "econ" 选项
sigma = gsvd(A,B) 返回广义奇异值的向量 sqrt(diag(C'*C)./diag(S'*S))。当 B 为方阵且为非奇异值时,广义奇异值 gsvd(A,B) 相当于普通奇异值 svd(A/B),但它们按相反顺序排序。其倒数为 gsvd(B,A)。
示例
矩阵的广义奇异值分解
对两个矩阵执行一次广义奇异值分解,同时计算广义奇异值。创建一个 5×3 矩阵 A
和一个 3×3 矩阵 B
。
A = reshape(1:15,5,3)
A = 5×3
1 6 11
2 7 12
3 8 13
4 9 14
5 10 15
B = magic(3)
B = 3×3
8 1 6
3 5 7
4 9 2
对 A 和 B 执行一次广义奇异值分解。输出包括正交矩阵 U 和 V、非奇异矩阵 X 以及对角矩阵 C 和 S。因为 A 秩亏,所以 C 的第一个对角线元素为零。
[U,V,X,C,S] = gsvd(A,B)
U = 5×5
-0.1882 0.6457 -0.4279 -0.4268 -0.4271
0.6897 0.3296 -0.4375 0.2067 0.4261
-0.6849 0.0135 -0.4470 0.2542 0.5160
0.0534 -0.3026 -0.4566 0.5787 -0.6019
0.1300 -0.6187 -0.4661 -0.6128 0.0869
V = 3×3
-0.7071 -0.6946 0.1325
0.0000 -0.1874 -0.9823
0.7071 -0.6946 0.1325
X = 3×3
-2.8284 -9.3761 -6.9346
5.6569 -8.3071 -18.3301
-2.8284 -7.2381 -29.7256
C = 5×3
0.0000 0 0
0 0.3155 0
0 0 0.9807
0 0 0
0 0 0
S = 3×3
1.0000 0 0
0 0.9489 0
0 0 0.1957
现在,对 A 和 B 执行一次精简分解。矩阵 U 和 C 具有不同大小,但其他输出矩阵大小相同。
[U,V,X,C,S] = gsvd(A,B,"econ")
U = 5×3
-0.3736 -0.6457 0.4279
-0.0076 -0.3296 0.4375
0.8617 -0.0135 0.4470
-0.2063 0.3026 0.4566
-0.2743 0.6187 0.4661
V = 3×3
-0.7071 0.6946 -0.1325
0.0000 0.1874 0.9823
0.7071 0.6946 -0.1325
X = 3×3
-2.8284 9.3761 6.9346
5.6569 8.3071 18.3301
-2.8284 7.2381 29.7256
C = 3×3
0 0 0
0 0.3155 0
0 0 0.9807
S = 3×3
1.0000 0 0
0 0.9489 0
0 0 0.1957
计算广义奇异值,在本例中,广义奇异值等于比值 diag(C)./diag(S)。这些值是对 svd(A/B) 返回的普通奇异值的重新排序。
sigma = gsvd(A,B)
sigma = 3×1
0.0000
0.3325
5.0123
svals = svd(A/B)
svals = 3×1
5.0123
0.3325
0.0000
具有无穷大奇异值的矩阵
检查为什么广义奇异值有时可以是 Inf。创建一个 3×5 矩阵 A 和一个 5×5 矩阵 B。
A = reshape(1:15,3,5)
A = 3×5
1 4 7 10 13
2 5 8 11 14
3 6 9 12 15
B = magic(5)
B = 5×5
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
对 A 和 B 执行一次广义奇异值分解。输出包括正交矩阵 U 和 V、非奇异矩阵 X 以及对角矩阵 C 和 S。在此情况下,C 的非零对角线为 diag(C,2)。
[U,V,X,C,S] = gsvd(A,B)
U = 3×3
0.4082 0.7178 -0.5639
-0.8165 0.0109 -0.5772
0.4082 -0.6961 -0.5906
V = 5×5
-0.4998 -0.6586 0.3195 -0.4552 -0.0843
0.1754 0.5301 0.6218 -0.5408 0.0956
-0.0423 0.1729 -0.0078 -0.0271 -0.9836
-0.3869 0.3344 -0.6610 -0.5408 0.0956
0.7536 -0.3788 -0.2725 -0.4552 -0.0843
X = 5×5
-0.2115 0.8645 10.0949 -30.7287 -4.6958
-2.4503 -14.9242 -2.1067 -28.5003 -11.6858
11.6680 2.1838 -14.8016 -26.2720 -18.6758
-9.0062 11.8759 -3.3206 -24.0436 -25.6657
0 0 10.1340 -21.8152 -32.6557
C = 3×5
0 0 0.0000 0 0
0 0 0 0.0439 0
0 0 0 0 0.7432
S = 5×5
1.0000 0 0 0 0
0 1.0000 0 0 0
0 0 1.0000 0 0
0 0 0 0.9990 0
0 0 0 0 0.6690
求包括零在内的广义奇异值。
sigma = gsvd(A,B)
sigma = 5×1
0
0
0.0000
0.0439
1.1109
颠倒 A 和 B 的角色会颠倒这些值,从而产生 Inf 值。
sigma2 = gsvd(B,A)
sigma2 = 5×1
1016 ×
0.0000
0.0000
3.8953
Inf
Inf
算法
由 gsvd 函数执行的广义奇异值分解使用 C-S 分解以及内置的 svd 和 qr 函数。