Main Content

本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

gsvd

广义奇异值分解

说明

[U,V,X,C,S] = gsvd(A,B) 返回酉矩阵 UV、(通常)方阵 X 以及非负对角矩阵 CS,以使

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

AB 必须具有相同列数,但可以具有不同行数。如果 Am×pBn×p,则 Um×mVn×nXp×qCm×qSn×q(其中 q = min(m+n,p))。

S 的非零元素始终在其主对角线上。C 的非零元素在对角线 diag(C,max(0,q-m)) 上。如果 m >= q,则这是 C 的主对角线。

[U,V,X,C,S] = gsvd(A,B,0)(其中 Am×pBn×p)生成精简分解,其中生成的 UV 最多有 p 列,CS 最多有 p 行。只要 m >= pn >= p,则广义奇异值为 diag(C)./diag(S)

如果 Am×pBn×p,则 Um×min(q,m)Vn×min(q,n)Xp×qCmin(q,m)×qSmin(q,n)×q(其中 q = min(m+n,p))。

sigma = gsvd(A,B) 返回广义奇异值的向量 sqrt(diag(C'*C)./diag(S'*S))。当 B 为方阵且为非奇异值时,广义奇异值 gsvd(A,B) 相当于普通奇异值 svd(A/B),但它们按相反顺序排序。其倒数为 gsvd(B,A)

向量 sigma 的长度为 q 且为非递减顺序。

示例

示例 1

这些矩阵的行数至少和列数一样多。

A = reshape(1:15,5,3)
B = magic(3)
A =
         1     6    11
         2     7    12
         3     8    13
         4     9    14
         5    10    15
B =
         8     1     6
         3     5     7
         4     9     2

语句

[U,V,X,C,S] = gsvd(A,B)

生成一个 5×5 正交矩阵 U、一个 3×3 正交矩阵 V、一个 3×3 非奇异矩阵 X

X =
        2.8284   -9.3761   -6.9346
       -5.6569   -8.3071  -18.3301
        2.8284   -7.2381  -29.7256

并且

C =
        0.0000         0         0
             0    0.3155         0
             0         0    0.9807
             0         0         0
             0         0         0
S =
        1.0000         0         0
             0    0.9489         0
             0         0    0.1957

因为 A 秩亏,所以 C 的第一个对角线元素为零。

精简分解,

[U,V,X,C,S] = gsvd(A,B,0)

生成一个 5×3 矩阵 U 和一个 3×3 矩阵 C

U =
        0.5700   -0.6457   -0.4279
       -0.7455   -0.3296   -0.4375
       -0.1702   -0.0135   -0.4470
        0.2966    0.3026   -0.4566
        0.0490    0.6187   -0.4661

C =
        0.0000         0         0
             0    0.3155         0
             0         0    0.9807

其他三个矩阵 VXS 与通过完整分解获取的矩阵相同。

广义奇异值是 CS 的对角线元素的比。

sigma = gsvd(A,B)
sigma =
        0.0000
        0.3325
        5.0123

这些值是对普通奇异值的重新排序

svd(A/B)
ans =
        5.0123
        0.3325
        0.0000

示例 2

这些矩阵的列数至少和行数一样多。

A = reshape(1:15,3,5)
B = magic(5)
A =

     1     4     7    10    13
     2     5     8    11    14
     3     6     9    12    15

B =

    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

语句

[U,V,X,C,S] = gsvd(A,B)

生成一个 3×3 正交矩阵 U、一个 5×5 正交矩阵 V、一个 5×5 非奇异矩阵 X 以及

C =

         0         0    0.0000         0         0
         0         0         0    0.0439         0
         0         0         0         0    0.7432

S =

    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

在此情况下,C 的非零对角线为 diag(C,2)。广义奇异值包括三个零值。

sigma = gsvd(A,B)
sigma =

         0
         0
    0.0000
    0.0439
    1.1109

颠倒 AB 的角色会使这些值互换,并生成两个无穷值。

gsvd(B,A)
ans =

   1.0e+16 *

    0.0000
    0.0000
    8.8252
       Inf
       Inf

提示

  • gsvd 的此公式中,没有对 AB 的各个秩做出假设。当且仅当矩阵 [A;B] 具有满秩时,矩阵 X 才具有满秩。实际上,svd(X)cond(X) 等于 svd([A;B])cond([A;B])。其他公式(例如 G. Golub 和 C. Van Loan[1])要求 null(A)null(B) 不重叠,并将 X 替换为 inv(X)inv(X')

    但请注意,当 null(A)null(B) 重叠时,确定的 CS 的非零元素不是唯一的。

算法

广义奇异值分解使用 [1] 中描述的 C-S 分解以及内置的 svdqr 函数。C-S 分解是在 gsvd 程序文件的局部函数中实现的。

参考

[1] Golub, Gene H. and Charles Van Loan, Matrix Computations, Third Edition, Johns Hopkins University Press, Baltimore, 1996

另请参阅

|

在 R2006a 之前推出