Accelerating the pace of engineering and science

Documentation Center

• Trial Software

gsvd

Generalized singular value decomposition

Syntax

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

Description

[U,V,X,C,S] = gsvd(A,B) returns unitary matrices U and V, a (usually) square matrix X, and nonnegative diagonal matrices C and S so that

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

A and B must have the same number of columns, but may have different numbers of rows. If A is m-by-p and B is n-by-p, then U is m-by-m, V is n-by-n and X is p-by-q where q = min(m+n,p).

sigma = gsvd(A,B) returns the vector of generalized singular values, sqrt(diag(C'*C)./diag(S'*S)).

The nonzero elements of S are always on its main diagonal. If m >= p the nonzero elements of C are also on its main diagonal. But if m < p, the nonzero diagonal of C is diag(C,p-m). This allows the diagonal elements to be ordered so that the generalized singular values are nondecreasing.

gsvd(A,B,0), with three input arguments and either m or n >= p, produces the "economy-sized"decomposition where the resulting U and V have at most p columns, and C and S have at most p rows. The generalized singular values are diag(C)./diag(S).

When B is square and nonsingular, the generalized singular values, gsvd(A,B), are equal to the ordinary singular values, svd(A/B), but they are sorted in the opposite order. Their reciprocals are gsvd(B,A).

In this formulation of the gsvd, no assumptions are made about the individual ranks of A or B. The matrix X has full rank if and only if the matrix [A;B] has full rank. In fact, svd(X) and cond(X) are equal to svd([A;B]) and cond([A;B]). Other formulations, eg. G. Golub and C. Van Loan [1], require that null(A) and null(B) do not overlap and replace X by inv(X) or inv(X').

Note, however, that when null(A) and null(B) do overlap, the nonzero elements of C and S are not uniquely determined.

Examples

Example 1

The matrices have at least as many rows as columns.

```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```

The statement

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

produces a 5-by-5 orthogonal U, a 3-by-3 orthogonal V, a 3-by-3 nonsingular X,

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

and

```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```

Since A is rank deficient, the first diagonal element of C is zero.

The economy sized decomposition,

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

produces a 5-by-3 matrix U and a 3-by-3 matrix 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```

The other three matrices, V, X, and S are the same as those obtained with the full decomposition.

The generalized singular values are the ratios of the diagonal elements of C and S.

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

These values are a reordering of the ordinary singular values

```svd(A/B)
ans =
5.0123
0.3325
0.0000```

Example 2

The matrices have at least as many columns as rows.

```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```

The statement

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

produces a 3-by-3 orthogonal U, a 5-by-5 orthogonal V, a 5-by-5 nonsingular X and

```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```

In this situation, the nonzero diagonal of C is diag(C,2). The generalized singular values include three zeros.

```sigma = gsvd(A,B)
sigma =

0
0
0.0000
0.0439
1.1109```

Reversing the roles of A and B reciprocates these values, producing two infinities.

```gsvd(B,A)
ans =

1.0e+16 *

0.0000
0.0000
8.8252
Inf
Inf```

Diagnostics

The only warning or error message produced by gsvd itself occurs when the two input arguments do not have the same number of columns.

expand all

Algorithms

The generalized singular value decomposition uses the C-S decomposition described in [1], as well as the built-in svd and qr functions. The C-S decomposition is implemented in a local function in the gsvd program file.

References

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