![]() |
LAPACK 3.12.0
LAPACK: Linear Algebra PACKage
|
| subroutine cuncsd2by1 | ( | character | jobu1, |
| character | jobu2, | ||
| character | jobv1t, | ||
| integer | m, | ||
| integer | p, | ||
| integer | q, | ||
| complex, dimension(ldx11,*) | x11, | ||
| integer | ldx11, | ||
| complex, dimension(ldx21,*) | x21, | ||
| integer | ldx21, | ||
| real, dimension(*) | theta, | ||
| complex, dimension(ldu1,*) | u1, | ||
| integer | ldu1, | ||
| complex, dimension(ldu2,*) | u2, | ||
| integer | ldu2, | ||
| complex, dimension(ldv1t,*) | v1t, | ||
| integer | ldv1t, | ||
| complex, dimension(*) | work, | ||
| integer | lwork, | ||
| real, dimension(*) | rwork, | ||
| integer | lrwork, | ||
| integer, dimension(*) | iwork, | ||
| integer | info ) |
CUNCSD2BY1
Download CUNCSD2BY1 + dependencies [TGZ] [ZIP] [TXT]
!> !> CUNCSD2BY1 computes the CS decomposition of an M-by-Q matrix X with !> orthonormal columns that has been partitioned into a 2-by-1 block !> structure: !> !> [ I1 0 0 ] !> [ 0 C 0 ] !> [ X11 ] [ U1 | ] [ 0 0 0 ] !> X = [-----] = [---------] [----------] V1**T . !> [ X21 ] [ | U2 ] [ 0 0 0 ] !> [ 0 S 0 ] !> [ 0 0 I2] !> !> X11 is P-by-Q. The unitary matrices U1, U2, and V1 are P-by-P, !> (M-P)-by-(M-P), and Q-by-Q, respectively. C and S are R-by-R !> nonnegative diagonal matrices satisfying C^2 + S^2 = I, in which !> R = MIN(P,M-P,Q,M-Q). I1 is a K1-by-K1 identity matrix and I2 is a !> K2-by-K2 identity matrix, where K1 = MAX(Q+P-M,0), K2 = MAX(Q-P,0). !> !>
| [in] | JOBU1 | !> JOBU1 is CHARACTER !> = 'Y': U1 is computed; !> otherwise: U1 is not computed. !> |
| [in] | JOBU2 | !> JOBU2 is CHARACTER !> = 'Y': U2 is computed; !> otherwise: U2 is not computed. !> |
| [in] | JOBV1T | !> JOBV1T is CHARACTER !> = 'Y': V1T is computed; !> otherwise: V1T is not computed. !> |
| [in] | M | !> M is INTEGER !> The number of rows in X. !> |
| [in] | P | !> P is INTEGER !> The number of rows in X11. 0 <= P <= M. !> |
| [in] | Q | !> Q is INTEGER !> The number of columns in X11 and X21. 0 <= Q <= M. !> |
| [in,out] | X11 | !> X11 is COMPLEX array, dimension (LDX11,Q) !> On entry, part of the unitary matrix whose CSD is desired. !> |
| [in] | LDX11 | !> LDX11 is INTEGER !> The leading dimension of X11. LDX11 >= MAX(1,P). !> |
| [in,out] | X21 | !> X21 is COMPLEX array, dimension (LDX21,Q) !> On entry, part of the unitary matrix whose CSD is desired. !> |
| [in] | LDX21 | !> LDX21 is INTEGER !> The leading dimension of X21. LDX21 >= MAX(1,M-P). !> |
| [out] | THETA | !> THETA is REAL array, dimension (R), in which R = !> MIN(P,M-P,Q,M-Q). !> C = DIAG( COS(THETA(1)), ... , COS(THETA(R)) ) and !> S = DIAG( SIN(THETA(1)), ... , SIN(THETA(R)) ). !> |
| [out] | U1 | !> U1 is COMPLEX array, dimension (P) !> If JOBU1 = 'Y', U1 contains the P-by-P unitary matrix U1. !> |
| [in] | LDU1 | !> LDU1 is INTEGER !> The leading dimension of U1. If JOBU1 = 'Y', LDU1 >= !> MAX(1,P). !> |
| [out] | U2 | !> U2 is COMPLEX array, dimension (M-P) !> If JOBU2 = 'Y', U2 contains the (M-P)-by-(M-P) unitary !> matrix U2. !> |
| [in] | LDU2 | !> LDU2 is INTEGER !> The leading dimension of U2. If JOBU2 = 'Y', LDU2 >= !> MAX(1,M-P). !> |
| [out] | V1T | !> V1T is COMPLEX array, dimension (Q) !> If JOBV1T = 'Y', V1T contains the Q-by-Q matrix unitary !> matrix V1**T. !> |
| [in] | LDV1T | !> LDV1T is INTEGER !> The leading dimension of V1T. If JOBV1T = 'Y', LDV1T >= !> MAX(1,Q). !> |
| [out] | WORK | !> WORK is COMPLEX array, dimension (MAX(1,LWORK)) !> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER !> The dimension of the array WORK. !> !> If LWORK = -1, then a workspace query is assumed; the routine !> only calculates the optimal size of the WORK and RWORK !> arrays, returns this value as the first entry of the WORK !> and RWORK array, respectively, and no error message related !> to LWORK or LRWORK is issued by XERBLA. !> |
| [out] | RWORK | !> RWORK is REAL array, dimension (MAX(1,LRWORK)) !> On exit, if INFO = 0, RWORK(1) returns the optimal LRWORK. !> If INFO > 0 on exit, RWORK(2:R) contains the values PHI(1), !> ..., PHI(R-1) that, together with THETA(1), ..., THETA(R), !> define the matrix in intermediate bidiagonal-block form !> remaining after nonconvergence. INFO specifies the number !> of nonzero PHI's. !> |
| [in] | LRWORK | !> LRWORK is INTEGER !> The dimension of the array RWORK. !> !> If LRWORK=-1, then a workspace query is assumed; the routine !> only calculates the optimal size of the WORK and RWORK !> arrays, returns this value as the first entry of the WORK !> and RWORK array, respectively, and no error message related !> to LWORK or LRWORK is issued by XERBLA. !> |
| [out] | IWORK | !> IWORK is INTEGER array, dimension (M-MIN(P,M-P,Q,M-Q)) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit. !> < 0: if INFO = -i, the i-th argument had an illegal value. !> > 0: CBBCSD did not converge. See the description of WORK !> above for details. !> |