DGGSVP(l)		LAPACK routine (version	1.1)		    DGGSVP(l)

NAME
  DGGSVP - 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 DGGSVP( 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

      DOUBLE	     PRECISION TOLA, TOLB

      INTEGER	     IWORK( * )

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

PURPOSE
  DGGSVP 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 DGGSVD.

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) DOUBLE	PRECISION 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) DOUBLE	PRECISION 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) DOUBLE PRECISION
	  TOLB	  (input) DOUBLE PRECISION 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)*MAZHEPS, TOLB =
	  MAX(P,N)*norm(B)*MAZHEPS.  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) DOUBLE PRECISION 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) DOUBLE PRECISION 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) DOUBLE PRECISION 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) DOUBLE PRECISION array, dimension	(N)

  WORK	  (workspace) DOUBLE PRECISION 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	DGEQPF 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