stgsja(3S)

STGSJA - compute the generalized singular value decomposition (GSVD) of two real upper triangular (or trapezoidal) matrices A and B

Showing IRIX 6.5.30 (default release). Added in IRIX 6.5.15.

NAME
     STGSJA - compute the generalized singular value decomposition (GSVD) of
     two real upper triangular (or trapezoidal) matrices A and B

SYNOPSIS
     SUBROUTINE STGSJA( JOBU, JOBV, JOBQ, M, P, N, K, L, A, LDA, B, LDB, TOLA,
                        TOLB, ALPHA, BETA, U, LDU, V, LDV, Q, LDQ, WORK,
                        NCYCLE, INFO )

         CHARACTER      JOBQ, JOBU, JOBV

         INTEGER        INFO, K, L, LDA, LDB, LDQ, LDU, LDV, M, N, NCYCLE, P

         REAL           TOLA, TOLB

         REAL           A( LDA, * ), ALPHA( * ), B( LDB, * ), BETA( * ), Q(
                        LDQ, * ), U( LDU, * ), V( LDV, * ), WORK( * )

IMPLEMENTATION
     These routines are part of the SCSL Scientific Library and can be loaded
     using either the -lscs or the -lscs_mp option.  The -lscs_mp option
     directs the linker to use the multi-processor version of the library.

     When linking to SCSL with -lscs or -lscs_mp, the default integer size is
     4 bytes (32 bits). Another version of SCSL is available in which integers
     are 8 bytes (64 bits).  This version allows the user access to larger
     memory sizes and helps when porting legacy Cray codes.  It can be loaded
     by using the -lscs_i8 option or the -lscs_i8_mp option. A program may use
     only one of the two versions; 4-byte integer and 8-byte integer library
     calls cannot be mixed.

PURPOSE
     STGSJA computes the generalized singular value decomposition (GSVD) of
     two real upper triangular (or trapezoidal) matrices A and B. On entry, it
     is assumed that matrices A and B have the following forms, which may be
     obtained by the preprocessing subroutine SGGSVP from a general M-by-N
     matrix A and P-by-N matrix B:

                  N-K-L  K    L
        A =    K ( 0    A12  A13 ) if M-K-L >= 0;
               L ( 0     0   A23 )
           M-K-L ( 0     0    0  )

                N-K-L  K    L
        A =  K ( 0    A12  A13 ) if M-K-L < 0;
           M-K ( 0     0   A23 )

                N-K-L  K    L
        B =  L ( 0     0   B13 )
           P-L ( 0     0    0  )

     where the K-by-K matrix A12 and L-by-L matrix B13 are nonsingular upper
     triangular; A23 is L-by-L upper triangular if M-K-L >= 0, otherwise A23
     is (M-K)-by-L upper trapezoidal.

     On exit,

                 U'*A*Q = D1*( 0 R ),    V'*B*Q = D2*( 0 R ),

     where U, V and Q are orthogonal matrices, Z' denotes the transpose of Z,
     R is a nonsingular upper triangular matrix, and D1 and D2 are
     ``diagonal'' matrices, which are of the following structures:

     If M-K-L >= 0,

                         K  L
            D1 =     K ( I  0 )
                     L ( 0  C )
                 M-K-L ( 0  0 )

                       K  L
            D2 = L   ( 0  S )
                 P-L ( 0  0 )

                    N-K-L  K    L
       ( 0 R ) = K (  0   R11  R12 ) K
                 L (  0    0   R22 ) L

     where

       C = diag( ALPHA(K+1), ... , ALPHA(K+L) ),
       S = diag( BETA(K+1),  ... , BETA(K+L) ),
       C**2 + S**2 = I.

       R is stored in A(1:K+L,N-K-L+1:N) on exit.

     If M-K-L < 0,

                    K M-K K+L-M
         D1 =   K ( I  0    0   )
              M-K ( 0  C    0   )

                      K M-K K+L-M
         D2 =   M-K ( 0  S    0   )
              K+L-M ( 0  0    I   )
                P-L ( 0  0    0   )

                    N-K-L  K   M-K  K+L-M

               M-K ( 0     0   R22  R23  )
             K+L-M ( 0     0    0   R33  )

     where
     C = diag( ALPHA(K+1), ... , ALPHA(M) ),
     S = diag( BETA(K+1),  ... , BETA(M) ),
     C**2 + S**2 = I.

     R = ( R11 R12 R13 ) is stored in A(1:M, N-K-L+1:N) and R33 is stored
         (  0  R22 R23 )
     in B(M-K+1:L,N+M-K-L+1:N) on exit.

     The computation of the orthogonal transformation matrices U, V or Q is
     optional.  These matrices may either be formed explicitly, or they may be
     postmultiplied into input matrices U1, V1, or Q1.


ARGUMENTS
     JOBU    (input) CHARACTER*1
             = 'U':  U must contain an orthogonal matrix U1 on entry, and the
             product U1*U is returned; = 'I':  U is initialized to the unit
             matrix, and the orthogonal matrix U is returned; = 'N':  U is not
             computed.

     JOBV    (input) CHARACTER*1
             = 'V':  V must contain an orthogonal matrix V1 on entry, and the
             product V1*V is returned; = 'I':  V is initialized to the unit
             matrix, and the orthogonal matrix V is returned; = 'N':  V is not
             computed.

     JOBQ    (input) CHARACTER*1
             = 'Q':  Q must contain an orthogonal matrix Q1 on entry, and the
             product Q1*Q is returned; = 'I':  Q is initialized to the unit
             matrix, and the orthogonal matrix Q is returned; = 'N':  Q is not
             computed.

     M       (input) INTEGER
             The number of rows of the matrix A.  M >= 0.

     P       (input) INTEGER
             The number of rows of the matrix B.  P >= 0.

     N       (input) INTEGER
             The number of columns of the matrices A and B.  N >= 0.

     K       (input) INTEGER
             L       (input) INTEGER K and L specify the subblocks in the
             input matrices A and B:
             A23 = A(K+1:MIN(K+L,M),N-L+1:N) and B13 = B(1:L,N-L+1:N) of A and
             B, whose GSVD is going to be computed by STGSJA.  See Further
             details.

     A       (input/output) REAL array, dimension (LDA,N)
             On entry, the M-by-N matrix A.  On exit, A(N-K+1:N,1:MIN(K+L,M) )
             contains the triangular matrix R or part of R.  See Purpose for
             details.

     LDA     (input) INTEGER
             The leading dimension of the array A. LDA >= max(1,M).

     B       (input/output) REAL array, dimension (LDB,N)
             On entry, the P-by-N matrix B.  On exit, if necessary, B(M-
             K+1:L,N+M-K-L+1:N) contains a part of R.  See Purpose for
             details.

     LDB     (input) INTEGER
             The leading dimension of the array B. LDB >= max(1,P).

     TOLA    (input) REAL
             TOLB    (input) REAL TOLA and TOLB are the convergence criteria
             for the Jacobi- Kogbetliantz iteration procedure. Generally, they
             are the same as used in the preprocessing step, say TOLA =
             max(M,N)*norm(A)*MACHEPS, TOLB = max(P,N)*norm(B)*MACHEPS.

     ALPHA   (output) REAL array, dimension (N)
             BETA    (output) REAL array, dimension (N) On exit, ALPHA and
             BETA contain the generalized singular value pairs of A and B;
             ALPHA(1:K) = 1,
             BETA(1:K)  = 0, and if M-K-L >= 0, ALPHA(K+1:K+L) = diag(C),
             BETA(K+1:K+L)  = diag(S), or if M-K-L < 0, ALPHA(K+1:M)= C,
             ALPHA(M+1:K+L)= 0
             BETA(K+1:M) = S, BETA(M+1:K+L) = 1.  Furthermore, if K+L < N,
             ALPHA(K+L+1:N) = 0 and
             BETA(K+L+1:N)  = 0.

     U       (input/output) REAL array, dimension (LDU,M)
             On entry, if JOBU = 'U', U must contain a matrix U1 (usually the
             orthogonal matrix returned by SGGSVP).  On exit, if JOBU = 'I', U
             contains the orthogonal matrix U; if JOBU = 'U', U contains the
             product U1*U.  If JOBU = 'N', U is not referenced.

     LDU     (input) INTEGER
             The leading dimension of the array U. LDU >= max(1,M) if JOBU =
             'U'; LDU >= 1 otherwise.

     V       (input/output) REAL array, dimension (LDV,P)
             On entry, if JOBV = 'V', V must contain a matrix V1 (usually the
             orthogonal matrix returned by SGGSVP).  On exit, if JOBV = 'I', V
             contains the orthogonal matrix V; if JOBV = 'V', V contains the
             product V1*V.  If JOBV = 'N', V is not referenced.

     LDV     (input) INTEGER
             The leading dimension of the array V. LDV >= max(1,P) if JOBV =
             'V'; LDV >= 1 otherwise.

     Q       (input/output) REAL array, dimension (LDQ,N)
             On entry, if JOBQ = 'Q', Q must contain a matrix Q1 (usually the
             orthogonal matrix returned by SGGSVP).  On exit, if JOBQ = 'I', Q
             contains the orthogonal matrix Q; if JOBQ = 'Q', Q contains the
             product Q1*Q.  If JOBQ = 'N', Q is not referenced.

     LDQ     (input) INTEGER
             The leading dimension of the array Q. LDQ >= max(1,N) if JOBQ =
             'Q'; LDQ >= 1 otherwise.

     WORK    (workspace) REAL array, dimension (2*N)

     NCYCLE  (output) INTEGER
             The number of cycles required for convergence.

     INFO    (output) INTEGER
             = 0:  successful exit
             < 0:  if INFO = -i, the i-th argument had an illegal value.
             = 1:  the procedure does not converge after MAXIT cycles.

PARAMETERS
     MAXIT   INTEGER
             MAXIT specifies the total loops that the iterative procedure may
             take. If after MAXIT cycles, the routine fails to converge, we
             return INFO = 1.

             Further Details ===============

             STGSJA essentially uses a variant of Kogbetliantz algorithm to
             reduce min(L,M-K)-by-L triangular (or trapezoidal) matrix A23 and
             L-by-L matrix B13 to the form:

             U1'*A13*Q1 = C1*R1; V1'*B13*Q1 = S1*R1,

             where U1, V1 and Q1 are orthogonal matrix, and Z' is the
             transpose of Z.  C1 and S1 are diagonal matrices satisfying

             C1**2 + S1**2 = I,

             and R1 is an L-by-L nonsingular upper triangular matrix.

SEE ALSO
     INTRO_LAPACK(3S), INTRO_SCSL(3S)

     This man page is available only online.