MATLAB中gsvd函数用法

目录

语法

说明

示例

矩阵的广义奇异值分解

具有无穷大奇异值的矩阵


        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 函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值