*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->IRIX man pages -> complib/cggsvd (3)              
Title
Content
Arch
Section
 

Contents


CGGSVD(3F)							    CGGSVD(3F)


NAME    [Toc]    [Back]

     CGGSVD - compute the generalized singular value decomposition (GSVD) of
     an	M-by-N complex matrix A	and P-by-N complex matrix B

SYNOPSIS    [Toc]    [Back]

     SUBROUTINE	CGGSVD(	JOBU, JOBV, JOBQ, M, N,	P, K, L, A, LDA, B, LDB,
			ALPHA, BETA, U,	LDU, V,	LDV, Q,	LDQ, WORK, RWORK,
			IWORK, INFO )

	 CHARACTER	JOBQ, JOBU, JOBV

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

	 INTEGER	IWORK( * )

	 REAL		ALPHA( * ), BETA( * ), RWORK( *	)

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

PURPOSE    [Toc]    [Back]

     CGGSVD computes the generalized singular value decomposition (GSVD) of an
     M-by-N complex matrix A and P-by-N	complex	matrix B:

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

     where U, V	and Q are unitary matrices, and	Z' means the conjugate
     transpose of Z.  Let K+L =	the effective numerical	rank of	the matrix
     (A',B')', then R is a (K+L)-by-(K+L) nonsingular upper triangular matrix,
     D1	and D2 are M-by-(K+L) and P-by-(K+L) "diagonal"	matrices and of	the
     following structures, respectively:

     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 )
		 L (  0	   0   R22 )
     where

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




									Page 1






CGGSVD(3F)							    CGGSVD(3F)



       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
       ( 0 R ) =     K ( 0    R11  R12	R13  )
		   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.

       (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 routine computes C, S,	R, and optionally the unitary
     transformation matrices U,	V and Q.

     In	particular, if B is an N-by-N nonsingular matrix, then the GSVD	of A
     and B implicitly gives the	SVD of A*inv(B):
			  A*inv(B) = U*(D1*inv(D2))*V'.
     If	( A',B')' has orthnormal columns, then the GSVD	of A and B is also
     equal to the CS decomposition of A	and B. Furthermore, the	GSVD can be
     used to derive the	solution of the	eigenvalue problem:
			  A'*A x = lambda* B'*B	x.
     In	some literature, the GSVD of A and B is	presented in the form
		      U'*A*X = ( 0 D1 ),   V'*B*X = ( 0	D2 )
     where U and V are orthogonal and X	is nonsingular,	and D1 and D2 are
     ``diagonal''.  The	former GSVD form can be	converted to the latter	form
     by	taking the nonsingular matrix X	as

			   X = Q*(  I	0    )
				 (  0 inv(R) )

ARGUMENTS    [Toc]    [Back]

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



									Page 2






CGGSVD(3F)							    CGGSVD(3F)



     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.

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

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

     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')'.

     A	     (input/output) COMPLEX array, dimension (LDA,N)
	     On	entry, the M-by-N matrix A.  On	exit, A	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) COMPLEX array, dimension (LDB,N)
	     On	entry, the P-by-N matrix B.  On	exit, B	contains part of the
	     triangular	matrix R if M-K-L < 0.	See Purpose for	details.

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

     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) = C,
	     BETA(K+1:K+L)  = 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	and ALPHA(K+L+1:N) = 0
	     BETA(K+L+1:N)  = 0

     U	     (output) COMPLEX array, dimension (LDU,M)
	     If	JOBU = 'U', U contains the M-by-M unitary matrix U.  If	JOBU =
	     'N', U is not referenced.






									Page 3






CGGSVD(3F)							    CGGSVD(3F)



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

     V	     (output) COMPLEX array, dimension (LDV,P)
	     If	JOBV = 'V', V contains the P-by-P unitary matrix 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	     (output) COMPLEX array, dimension (LDQ,N)
	     If	JOBQ = 'Q', Q contains the N-by-N unitary matrix 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) COMPLEX array,	dimension (max(3*N,M,P)+N)

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

     IWORK   (workspace) INTEGER array,	dimension (N)

     INFO    (output)INTEGER
	     = 0:  successful exit.
	     < 0:  if INFO = -i, the i-th argument had an illegal value.
	     > 0:  if INFO = 1,	the Jacobi-type	procedure failed to converge.
	     For further details, see subroutine CTGSJA.

PARAMETERS    [Toc]    [Back]

     TOLA    REAL
	     TOLB    REAL TOLA and TOLB	are the	thresholds to determine	the
	     effective rank of (A',B')'. 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.
CGGSVD(3F)							    CGGSVD(3F)


NAME    [Toc]    [Back]

     CGGSVD - compute the generalized singular value decomposition (GSVD) of
     an	M-by-N complex matrix A	and P-by-N complex matrix B

SYNOPSIS    [Toc]    [Back]

     SUBROUTINE	CGGSVD(	JOBU, JOBV, JOBQ, M, N,	P, K, L, A, LDA, B, LDB,
			ALPHA, BETA, U,	LDU, V,	LDV, Q,	LDQ, WORK, RWORK,
			IWORK, INFO )

	 CHARACTER	JOBQ, JOBU, JOBV

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

	 INTEGER	IWORK( * )

	 REAL		ALPHA( * ), BETA( * ), RWORK( *	)

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

PURPOSE    [Toc]    [Back]

     CGGSVD computes the generalized singular value decomposition (GSVD) of an
     M-by-N complex matrix A and P-by-N	complex	matrix B:

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

     where U, V	and Q are unitary matrices, and	Z' means the conjugate
     transpose of Z.  Let K+L =	the effective numerical	rank of	the matrix
     (A',B')', then R is a (K+L)-by-(K+L) nonsingular upper triangular matrix,
     D1	and D2 are M-by-(K+L) and P-by-(K+L) "diagonal"	matrices and of	the
     following structures, respectively:

     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 )
		 L (  0	   0   R22 )
     where

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




									Page 1






CGGSVD(3F)							    CGGSVD(3F)



       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
       ( 0 R ) =     K ( 0    R11  R12	R13  )
		   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.

       (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 routine computes C, S,	R, and optionally the unitary
     transformation matrices U,	V and Q.

     In	particular, if B is an N-by-N nonsingular matrix, then the GSVD	of A
     and B implicitly gives the	SVD of A*inv(B):
			  A*inv(B) = U*(D1*inv(D2))*V'.
     If	( A',B')' has orthnormal columns, then the GSVD	of A and B is also
     equal to the CS decomposition of A	and B. Furthermore, the	GSVD can be
     used to derive the	solution of the	eigenvalue problem:
			  A'*A x = lambda* B'*B	x.
     In	some literature, the GSVD of A and B is	presented in the form
		      U'*A*X = ( 0 D1 ),   V'*B*X = ( 0	D2 )
     where U and V are orthogonal and X	is nonsingular,	and D1 and D2 are
     ``diagonal''.  The	former GSVD form can be	converted to the latter	form
     by	taking the nonsingular matrix X	as

			   X = Q*(  I	0    )
				 (  0 inv(R) )

ARGUMENTS    [Toc]    [Back]

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



									Page 2






CGGSVD(3F)							    CGGSVD(3F)



     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.

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

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

     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')'.

     A	     (input/output) COMPLEX array, dimension (LDA,N)
	     On	entry, the M-by-N matrix A.  On	exit, A	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) COMPLEX array, dimension (LDB,N)
	     On	entry, the P-by-N matrix B.  On	exit, B	contains part of the
	     triangular	matrix R if M-K-L < 0.	See Purpose for	details.

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

     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) = C,
	     BETA(K+1:K+L)  = 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	and ALPHA(K+L+1:N) = 0
	     BETA(K+L+1:N)  = 0

     U	     (output) COMPLEX array, dimension (LDU,M)
	     If	JOBU = 'U', U contains the M-by-M unitary matrix U.  If	JOBU =
	     'N', U is not referenced.






									Page 3






CGGSVD(3F)							    CGGSVD(3F)



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

     V	     (output) COMPLEX array, dimension (LDV,P)
	     If	JOBV = 'V', V contains the P-by-P unitary matrix 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	     (output) COMPLEX array, dimension (LDQ,N)
	     If	JOBQ = 'Q', Q contains the N-by-N unitary matrix 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) COMPLEX array,	dimension (max(3*N,M,P)+N)

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

     IWORK   (workspace) INTEGER array,	dimension (N)

     INFO    (output)INTEGER
	     = 0:  successful exit.
	     < 0:  if INFO = -i, the i-th argument had an illegal value.
	     > 0:  if INFO = 1,	the Jacobi-type	procedure failed to converge.
	     For further details, see subroutine CTGSJA.

PARAMETERS    [Toc]    [Back]

     TOLA    REAL
	     TOLB    REAL TOLA and TOLB	are the	thresholds to determine	the
	     effective rank of (A',B')'. 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.


									PPPPaaaaggggeeee 4444
[ Back ]
 Similar pages
Name OS Title
cungbr IRIX generate one of the complex unitary matrices Q or P**H determined by CGEBRD when reducing a complex matrix A t
zungbr IRIX generate one of the complex unitary matrices Q or P**H determined by ZGEBRD when reducing a complex matrix A t
clarf IRIX applie a complex elementary reflector H to a complex M-by-N matrix C, from either the left or the right
zlarf IRIX applie a complex elementary reflector H to a complex M-by-N matrix C, from either the left or the right
zlarfx IRIX applie a complex elementary reflector H to a complex m by n matrix C, from either the left or the right
clarfx IRIX applie a complex elementary reflector H to a complex m by n matrix C, from either the left or the right
CGECO IRIX CGECO factors a complex matrix by Gaussian elimination and estimates the condition of the matrix. If RCOND is
CPOCO IRIX CPOCO factors a complex Hermitian positive definite matrix and estimates the condition of the matrix. If RCOND
HTRIDI IRIX EISPACK routine. This subroutine reduces a COMPLEX HERMITIAN matrix to a real symmetric tridiagonal matrix usi
CGBCO IRIX CGBCO factors a complex band matrix by Gaussian elimination and estimates the condition of the matrix. If RCON
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service