SGGSVP(l)		LAPACK routine (version	1.1)		    SGGSVP(l)

NAME
  SGGSVP - compute orthogonal matrices U, V and	Q such that   U'*A*Q = ( 0
  A12 A13 ) K ,	V'*B*Q = ( 0 0 B13 ) L	( 0 0 A23 ) L (	0 0 0 )	P-L  ( 0 0 0
  ) M-K-L N-K-L	K L  N-K-L K L	where the K-by-K matrix	A12 and	L-by-L matrix
  B13 are nonsingular upper triangular

SYNOPSIS

  SUBROUTINE SGGSVP( JOBU, JOBV, JOBQ, M, P, N,	A, LDA,	B, LDB,	TOLA, TOLB,
		     K,	L, U, LDU, V, LDV, Q, LDQ, IWORK, TAU, WORK, INFO )

      CHARACTER	     JOBQ, JOBU, JOBV

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

      REAL	     TOLA, TOLB

      INTEGER	     IWORK( * )

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

PURPOSE
  SGGSVP computes orthogonal matrices U, V and Q such that A23 is upper	tra-
  pezoidal.  K+L = the effective rank of (M+P)-by-N matrix (A',B')'.  Z'
  denotes the transpose	of Z.

  This decomposition is	the preprocessing step for computing the Generalized
  Singular Value Decomposition (GSVD), see subroutine SGGSVD.

ARGUMENTS

  JOBU	  (input) CHARACTER*1
	  = 'U':  Orthogonal matrix U is computed;
	  = 'N':  U is not computed.

  JOBV	  (input) CHARACTER*1
	  = 'V':  Orthogonal matrix V is computed;
	  = 'N':  V is not computed.

  JOBQ	  (input) CHARACTER*1
	  = 'Q':  Orthogonal matrix Q is computed;
	  = '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.

  A	  (input/output) REAL array, dimension (LDA,N)
	  On entry, the	M-by-N matrix A.  On exit, A contains the triangular
	  (or trapezoidal) matrix described in the Purpose section.

  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, B contains the triangular
	  matrix described in the Purpose section.

  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 thresholds	to determine
	  the effective	rank of	matrix B and a subblock	of A. Generally, they
	  are set to TOLA = MAX(M,N)*norm(A)*MACHEPS, TOLB =
	  MAX(P,N)*norm(B)*MACHEPS.  The size of TOLA and TOLB may affect the
	  size of backward errors of the decomposition.

  K	  (output) INTEGER
	  L	  (output) INTEGER On exit, K and L specify the	dimension of
	  the subblocks	described in Purpose.  K + L = effective numerical
	  rank of (A',B')'.

  U	  (output) REAL	array, dimension (LDU,M)
	  If JOBU = 'U', U contains the	orthogonal matrix U.  If JOBU =	'N',
	  U is not referenced.

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

  V	  (output) REAL	array, dimension (LDV,M)
	  If JOBV = 'V', V contains the	orthogonal matrix V.  If JOBV =	'N',
	  V is not referenced.

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

  Q	  (output) REAL	array, dimension (LDQ,N)
	  If JOBQ = 'Q', Q contains the	orthogonal matrix Q.  If JOBQ =	'N',
	  Q is not referenced.

  LDQ	  (input) INTEGER
	  The leading dimension	of the array Q.	LDQ >= max(1,N).

  IWORK	  (workspace) INTEGER array, dimension (N)

  TAU	  (workspace) REAL array, dimension (N)

  WORK	  (workspace) REAL array, dimension (MAX(3*N,M,P))

  INFO	  (output) INTEGER
	  = 0:	successful exit
	  < 0:	if INFO	= -i, the i-th argument	had an illegal value.

FURTHER	DETAILS
  The subroutine uses LAPACK subroutine	SGEQPF for the QR factorization	with
  column pivoting to detect the	effective numerical rank of the	a matrix. It
  may be replaced by a better rank determination strategy.


Back to the listing of computational routines for orthogonal factorization and singular value decomposition