The generalized (or quotient) singular value decomposition of an m-by-n matrix A and a p-by-n matrix B is the pair of factorizations

where V, V, Q, R,
and
are defined
as follows.
should be
replaced by
in the pair of factorizations.
, and satisfies r > = n.
is m-by-r,
is p-by-r, both are real, nonnegative and diagonal,
and
.
Write
and
,
where
and
lie in the interval from 0 to 1.
The ratios
are called the generalized singular values of the pair A , B.
If
, then the generalized singular value
is infinite.
For details on the structure of
,
and R, see
section 2.2.5.3.
The generalized singular value decomposition is
computed by driver routine xGGSVD (see section 2.2.5.3).
We will give error bounds for the generalized
singular values in the
common case where
has full
rank r = n.
Let
and
be the values of
and
, respectively,
computed by xGGSVD.
The approximate error
bound
for these values is

Note that if
is close to zero, then a true
generalized singular value
can differ greatly in magnitude from
the computed generalized singular value
, even if SERRBD is
close to its minimum
.
Here is another way to interpret SERRBD:
if we think of
and
as representing the subspace S
consisting of the straight line through the origin with slope
, and similarly
and
representing the subspace
,
then SERRBD bounds the acute angle between
S and
.
Note that any two
lines through the origin with nearly vertical slopes
(very large
) are close together in angle.
(This is related to the chordal distance in
section 4.10.1.)
SERRBD can be computed by the following code fragment, which for simplicity assumes m > = n. (The assumption r = n implies only that p + m > = n. Error bounds can also be computed when p + m > = n > m, with slightly more complicated code.)
EPSMCH = SLAMCH( 'E' )
* Compute generalized singular values of A and B
CALL SGGSVD( 'N', 'N', 'N', M, N, P, K, L, A, LDA, B,
$ LDB, ALPHA, BETA, U, LDU, V, LDV, Q, LDQ,
$ WORK, IWORK, INFO )
* Compute rank of [A',B']'
RANK = K+L
IF( INFO.GT.0 ) THEN
PRINT *,'SGGSVD did not converge'
ELSE IF( RANK.LT.N ) THEN
PRINT *,'[A**T,B**T]**T not full rank'
ELSE IF ( M .GE. N .AND. N .GT. 0 ) THEN
* Compute reciprocal condition number RCOND of R
CALL STRCON( 'I', 'U', 'N', N, A, LDA, RCOND, WORK,
$ IWORK, INFO )
RCOND = MAX( RCOND, EPSMCH )
SERRBD = EPSMCH / RCOND
END IF
For example, if
,

then, to 4 decimal places,

, and the true errors
are
,
and
.