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

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

Contents


CTGSJA(3F)							    CTGSJA(3F)


NAME    [Toc]    [Back]

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

SYNOPSIS    [Toc]    [Back]

     SUBROUTINE	CTGSJA(	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		ALPHA( * ), BETA( * )

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

PURPOSE    [Toc]    [Back]

     CTGSJA computes the generalized singular value decomposition (GSVD) of
     two complex 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 CGGSVP 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 unitary matrices, Z' denotes the conjugate transpose
     of	Z, R is	a nonsingular upper triangular matrix, and D1 and D2 are
     ``diagonal'' matrices, which are of the following structures:



									Page 1






CTGSJA(3F)							    CTGSJA(3F)



     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 unitary 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.




									Page 2






CTGSJA(3F)							    CTGSJA(3F)


ARGUMENTS    [Toc]    [Back]

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

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

     JOBQ    (input) CHARACTER*1
	     = 'Q':  Q must contain a unitary matrix Q1	on entry, and the
	     product Q1*Q is returned; = 'I':  Q is initialized	to the unit
	     matrix, and the unitary 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 CTGSJA.  See Further
	     details.

     A	     (input/output) COMPLEX 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) COMPLEX array, dimension (LDB,N)
	     On	entry, the P-by-N matrix B.  On	exit, if necessary, B(MK+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).





									Page 3






CTGSJA(3F)							    CTGSJA(3F)



     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
	     BETA(K+L+1:N)  = 0.

     U	     (input/output) COMPLEX array, dimension (LDU,M)
	     On	entry, if JOBU = 'U', U	must contain a matrix U1 (usually the
	     unitary matrix returned by	CGGSVP).  On exit, if JOBU = 'I', U
	     contains the unitary 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) COMPLEX array, dimension (LDV,P)
	     On	entry, if JOBV = 'V', V	must contain a matrix V1 (usually the
	     unitary matrix returned by	CGGSVP).  On exit, if JOBV = 'I', V
	     contains the unitary 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) COMPLEX array, dimension (LDQ,N)
	     On	entry, if JOBQ = 'Q', Q	must contain a matrix Q1 (usually the
	     unitary matrix returned by	CGGSVP).  On exit, if JOBQ = 'I', Q
	     contains the unitary 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) COMPLEX array,	dimension (2*N)

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




									Page 4






CTGSJA(3F)							    CTGSJA(3F)



     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    [Toc]    [Back]

     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 ===============

	     CTGSJA 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 unitary matrix, and Z' is the conjugate
	     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.
CTGSJA(3F)							    CTGSJA(3F)


NAME    [Toc]    [Back]

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

SYNOPSIS    [Toc]    [Back]

     SUBROUTINE	CTGSJA(	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		ALPHA( * ), BETA( * )

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

PURPOSE    [Toc]    [Back]

     CTGSJA computes the generalized singular value decomposition (GSVD) of
     two complex 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 CGGSVP 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 unitary matrices, Z' denotes the conjugate transpose
     of	Z, R is	a nonsingular upper triangular matrix, and D1 and D2 are
     ``diagonal'' matrices, which are of the following structures:



									Page 1






CTGSJA(3F)							    CTGSJA(3F)



     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 unitary 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.




									Page 2






CTGSJA(3F)							    CTGSJA(3F)


ARGUMENTS    [Toc]    [Back]

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

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

     JOBQ    (input) CHARACTER*1
	     = 'Q':  Q must contain a unitary matrix Q1	on entry, and the
	     product Q1*Q is returned; = 'I':  Q is initialized	to the unit
	     matrix, and the unitary 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 CTGSJA.  See Further
	     details.

     A	     (input/output) COMPLEX 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) COMPLEX array, dimension (LDB,N)
	     On	entry, the P-by-N matrix B.  On	exit, if necessary, B(MK+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).





									Page 3






CTGSJA(3F)							    CTGSJA(3F)



     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
	     BETA(K+L+1:N)  = 0.

     U	     (input/output) COMPLEX array, dimension (LDU,M)
	     On	entry, if JOBU = 'U', U	must contain a matrix U1 (usually the
	     unitary matrix returned by	CGGSVP).  On exit, if JOBU = 'I', U
	     contains the unitary 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) COMPLEX array, dimension (LDV,P)
	     On	entry, if JOBV = 'V', V	must contain a matrix V1 (usually the
	     unitary matrix returned by	CGGSVP).  On exit, if JOBV = 'I', V
	     contains the unitary 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) COMPLEX array, dimension (LDQ,N)
	     On	entry, if JOBQ = 'Q', Q	must contain a matrix Q1 (usually the
	     unitary matrix returned by	CGGSVP).  On exit, if JOBQ = 'I', Q
	     contains the unitary 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) COMPLEX array,	dimension (2*N)

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




									Page 4






CTGSJA(3F)							    CTGSJA(3F)



     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    [Toc]    [Back]

     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 ===============

	     CTGSJA 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 unitary matrix, and Z' is the conjugate
	     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.


									PPPPaaaaggggeeee 5555
[ Back ]
 Similar pages
Name OS Title
stgsja IRIX compute the generalized singular value decomposition (GSVD) of two real upper triangular (or trapezoidal) matr
dtgsja IRIX compute the generalized singular value decomposition (GSVD) of two real upper triangular (or trapezoidal) matr
ztgevc IRIX compute some or all of the right and/or left generalized eigenvectors of a pair of complex upper triangular ma
ctgevc IRIX compute some or all of the right and/or left generalized eigenvectors of a pair of complex upper triangular ma
ztzrqf IRIX reduce the M-by-N ( M<=N ) complex upper trapezoidal matrix A to upper triangular form by means of unitary tra
ctzrqf IRIX reduce the M-by-N ( M<=N ) complex upper trapezoidal matrix A to upper triangular form by means of unitary tra
slasv2 IRIX compute the singular value decomposition of a 2-by-2 triangular matrix [ F G ] [ 0 H ]
dlasv2 IRIX compute the singular value decomposition of a 2-by-2 triangular matrix [ F G ] [ 0 H ]
sbdsqr IRIX compute the singular value decomposition (SVD) of a real N-by-N (upper or lower) bidiagonal matrix B
zbdsqr IRIX compute the singular value decomposition (SVD) of a real N-by-N (upper or lower) bidiagonal matrix B
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service