Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

gsvd

广义奇异值分解

说明

示例

[U,V,X,C,S] = gsvd(A,B) 执行矩阵 AB 的广义奇异值分解,并返回酉矩阵 UV、矩阵 X 以及非负对角矩阵 CS,使得

A = U*C*X'
B = V*S*X'
C'*C + S'*S = I 

示例

[U,V,X,C,S] = gsvd(A,B,"econ")(其中 Am×pBn×p)生成精简分解,其中生成的 UV 矩阵最多有 p 列,CS 最多有 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

AB 执行一次广义奇异值分解。输出包括正交矩阵 UV、非奇异矩阵 X 以及对角矩阵 CS。因为 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

现在,对 AB 执行一次精简分解。矩阵 UC 具有不同大小,但其他输出矩阵大小相同。

[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

AB 执行一次广义奇异值分解。输出包括正交矩阵 UV、非奇异矩阵 X 以及对角矩阵 CS。在此情况下,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

颠倒 AB 的角色会颠倒这些值,从而产生 Inf 值。

sigma2 = gsvd(B,A)
sigma2 = 5×1
1016 ×

    0.0000
    0.0000
    3.8953
       Inf
       Inf

输入参数

全部折叠

输入矩阵。AB 必须具有相同列数,但可以具有不同行数。

数据类型: single | double
复数支持:

输出参数

全部折叠

酉矩阵因子,以矩阵形式返回。UV 是具有正交列的矩阵,它们分别构成 AB 中列的基。

UV 的大小取决于您是否指定 "econ" 选项。如果 Am×p 并且 Bn×p,则:

  • 默认情况下,Um×mVn×n

  • 如果指定 "econ" 选项,则 Um×min(m,p)Vn×min(n,p)

矩阵因子,以矩阵形式返回。如果 Am×p,并且 Bn×p,则 Xp×q,其中 q[A; B] 的数值秩。

X 的一个属性是 norm([A; B]) == norm(X),因为 UVCS 只表示矩阵 [A; B] 的一个正交基。

对角矩阵因子,以矩阵形式返回。S 的非零元素始终在其主对角线上。C 的非零元素在对角线 diag(C,max(0,size(C,2)-size(C,1))) 上。要检索非零值,请使用命令 sv = max(S,[],1)cv = max(C,[],1)AB 的广义奇异值等于比值 cv./sv

CS 的大小取决于您是否指定 "econ" 选项。如果 Am×p 并且 Bn×p,则:

  • 默认情况下,Cm×qSn×q

  • 如果指定 "econ" 选项,则 Cmin(m,p)×qVmin(n,p)×q

在这两种情况下,q 均为 [A; B] 的数值秩。

广义奇异值,以列向量形式返回。如果 sv = max(S,[],1)cv = max(C,[],1),则 AB 的广义奇异值等于比值 cv./sv

sigma 的长度等于 [A; B] 的数值秩且为非递减顺序。

算法

gsvd 函数执行的广义奇异值分解使用 C-S 分解以及内置的 svdqr 函数。

扩展功能

版本历史记录

在 R2006a 之前推出

全部展开

另请参阅

|