ZGGSVP(l)		LAPACK routine (version	1.1)		    ZGGSVP(l)

NAME
  ZGGSVP - compute unitary 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 ZGGSVP( JOBU, JOBV, JOBQ, M, P, N,	A, LDA,	B, LDB,	TOLA, TOLB,
		     K,	L, U, LDU, V, LDV, Q, LDQ, IWORK, RWORK, 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 RWORK( *	)

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

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

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

ARGUMENTS

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

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

  JOBQ	  (input) CHARACTER*1
	  = 'Q':  Unitary 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) COMPLEX*16 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) COMPLEX*16 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 section.  K + L = effective
	  numerical rank of (A',B')'.

  U	  (output) COMPLEX*16 array, dimension (LDU,M)
	  If JOBU = 'U', U contains the	unitary	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) COMPLEX*16 array, dimension (LDV,M)
	  If JOBV = 'V', V contains the	unitary	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) COMPLEX*16 array, dimension (LDQ,N)
	  If JOBQ = 'Q', Q contains the	unitary	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)

  RWORK	  (workspace) DOUBLE PRECISION array, dimension	(2*N)

  TAU	  (workspace) COMPLEX*16 array,	dimension (N)

  WORK	  (workspace) COMPLEX*16 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	ZGEQPF 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