uncsd2by1#
Functions
-
void cuncsd2by1(const char *jobu1, const char *jobu2, const char *jobv1t, const INT m, const INT p, const INT q, c64 *restrict X11, const INT ldx11, c64 *restrict X21, const INT ldx21, f32 *restrict theta, c64 *restrict U1, const INT ldu1, c64 *restrict U2, const INT ldu2, c64 *restrict V1T, const INT ldv1t, c64 *restrict work, const INT lwork, f32 *restrict rwork, const INT lrwork, INT *restrict iwork, INT *info)#
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:
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).[ I1 0 0 ] [ 0 C 0 ] [ X11 ] [ U1 | ] [ 0 0 0 ] X = [-----] = [---------] [----------] V1**H . [ X21 ] [ | U2 ] [ 0 0 0 ] [ 0 S 0 ] [ 0 0 I2]
Parameters
injobu1= ‘Y’: U1 is computed; otherwise: U1 is not computed.
injobu2= ‘Y’: U2 is computed; otherwise: U2 is not computed.
injobv1t= ‘Y’: V1T is computed; otherwise: V1T is not computed.
inmThe number of rows in X.
inpThe number of rows in X11. 0 <= p <= m.
inqThe number of columns in X11 and X21. 0 <= q <= m.
inoutX11Complex*16 array, dimension (ldx11, q). On entry, part of the unitary matrix whose CSD is desired.
inldx11The leading dimension of X11. ldx11 >= max(1, p).
inoutX21Complex*16 array, dimension (ldx21, q). On entry, part of the unitary matrix whose CSD is desired.
inldx21The leading dimension of X21. ldx21 >= max(1, m-p).
outthetaSingle precision array, dimension (r), where 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)) ).
outU1Complex*16 array, dimension (ldu1, p). If jobu1 = ‘Y’, U1 contains the P-by-P unitary matrix U1.
inldu1The leading dimension of U1. If jobu1 = ‘Y’, ldu1 >= max(1, p).
outU2Complex*16 array, dimension (ldu2, m-p). If jobu2 = ‘Y’, U2 contains the (M-P)-by-(M-P) unitary matrix U2.
inldu2The leading dimension of U2. If jobu2 = ‘Y’, ldu2 >= max(1, m-p).
outV1TComplex*16 array, dimension (ldv1t, q). If jobv1t = ‘Y’, V1T contains the Q-by-Q unitary matrix V1**H.
inldv1tThe leading dimension of V1T. If jobv1t = ‘Y’, ldv1t >= max(1, q).
outworkComplex*16 array, dimension (max(1, lwork)). On exit, if info = 0, work[0] returns the optimal lwork.
inlworkThe dimension of the array work. If lwork = -1, a workspace query is assumed.
outrworkSingle precision array, dimension (max(1, lrwork)). On exit, if info = 0, rwork[0] returns the optimal lrwork.
inlrworkThe dimension of the array rwork. If lrwork = -1, a workspace query is assumed.
outiworkInteger array, dimension (m - min(p, m-p, q, m-q)).
outinfo= 0: successful exit.
< 0: if info = -i, the i-th argument had an illegal value.
> 0: CBBCSD did not converge.
void cuncsd2by1(
const char* jobu1,
const char* jobu2,
const char* jobv1t,
const INT m,
const INT p,
const INT q,
c64* restrict X11,
const INT ldx11,
c64* restrict X21,
const INT ldx21,
f32* restrict theta,
c64* restrict U1,
const INT ldu1,
c64* restrict U2,
const INT ldu2,
c64* restrict V1T,
const INT ldv1t,
c64* restrict work,
const INT lwork,
f32* restrict rwork,
const INT lrwork,
INT* restrict iwork,
INT* info
);
Functions
-
void zuncsd2by1(const char *jobu1, const char *jobu2, const char *jobv1t, const INT m, const INT p, const INT q, c128 *restrict X11, const INT ldx11, c128 *restrict X21, const INT ldx21, f64 *restrict theta, c128 *restrict U1, const INT ldu1, c128 *restrict U2, const INT ldu2, c128 *restrict V1T, const INT ldv1t, c128 *restrict work, const INT lwork, f64 *restrict rwork, const INT lrwork, INT *restrict iwork, INT *info)#
ZUNCSD2BY1 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:
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).[ I1 0 0 ] [ 0 C 0 ] [ X11 ] [ U1 | ] [ 0 0 0 ] X = [-----] = [---------] [----------] V1**H . [ X21 ] [ | U2 ] [ 0 0 0 ] [ 0 S 0 ] [ 0 0 I2]
Parameters
injobu1= ‘Y’: U1 is computed; otherwise: U1 is not computed.
injobu2= ‘Y’: U2 is computed; otherwise: U2 is not computed.
injobv1t= ‘Y’: V1T is computed; otherwise: V1T is not computed.
inmThe number of rows in X.
inpThe number of rows in X11. 0 <= p <= m.
inqThe number of columns in X11 and X21. 0 <= q <= m.
inoutX11Complex*16 array, dimension (ldx11, q). On entry, part of the unitary matrix whose CSD is desired.
inldx11The leading dimension of X11. ldx11 >= max(1, p).
inoutX21Complex*16 array, dimension (ldx21, q). On entry, part of the unitary matrix whose CSD is desired.
inldx21The leading dimension of X21. ldx21 >= max(1, m-p).
outthetaDouble precision array, dimension (r), where 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)) ).
outU1Complex*16 array, dimension (ldu1, p). If jobu1 = ‘Y’, U1 contains the P-by-P unitary matrix U1.
inldu1The leading dimension of U1. If jobu1 = ‘Y’, ldu1 >= max(1, p).
outU2Complex*16 array, dimension (ldu2, m-p). If jobu2 = ‘Y’, U2 contains the (M-P)-by-(M-P) unitary matrix U2.
inldu2The leading dimension of U2. If jobu2 = ‘Y’, ldu2 >= max(1, m-p).
outV1TComplex*16 array, dimension (ldv1t, q). If jobv1t = ‘Y’, V1T contains the Q-by-Q unitary matrix V1**H.
inldv1tThe leading dimension of V1T. If jobv1t = ‘Y’, ldv1t >= max(1, q).
outworkComplex*16 array, dimension (max(1, lwork)). On exit, if info = 0, work[0] returns the optimal lwork.
inlworkThe dimension of the array work. If lwork = -1, a workspace query is assumed.
outrworkDouble precision array, dimension (max(1, lrwork)). On exit, if info = 0, rwork[0] returns the optimal lrwork.
inlrworkThe dimension of the array rwork. If lrwork = -1, a workspace query is assumed.
outiworkInteger array, dimension (m - min(p, m-p, q, m-q)).
outinfo= 0: successful exit.
< 0: if info = -i, the i-th argument had an illegal value.
> 0: ZBBCSD did not converge.
void zuncsd2by1(
const char* jobu1,
const char* jobu2,
const char* jobv1t,
const INT m,
const INT p,
const INT q,
c128* restrict X11,
const INT ldx11,
c128* restrict X21,
const INT ldx21,
f64* restrict theta,
c128* restrict U1,
const INT ldu1,
c128* restrict U2,
const INT ldu2,
c128* restrict V1T,
const INT ldv1t,
c128* restrict work,
const INT lwork,
f64* restrict rwork,
const INT lrwork,
INT* restrict iwork,
INT* info
);