bbcsd#
Functions
-
void sbbcsd(const char *jobu1, const char *jobu2, const char *jobv1t, const char *jobv2t, const char *trans, const INT m, const INT p, const INT q, f32 *restrict theta, f32 *restrict phi, f32 *restrict U1, const INT ldu1, f32 *restrict U2, const INT ldu2, f32 *restrict V1T, const INT ldv1t, f32 *restrict V2T, const INT ldv2t, f32 *restrict B11D, f32 *restrict B11E, f32 *restrict B12D, f32 *restrict B12E, f32 *restrict B21D, f32 *restrict B21E, f32 *restrict B22D, f32 *restrict B22E, f32 *restrict work, const INT lwork, INT *info)#
SBBCSD computes the CS decomposition of an orthogonal matrix in bidiagonal-block form.
X is M-by-M, its top-left block is P-by-Q, and Q must be no larger than P, M-P, or M-Q.
Parameters
injobu1= ‘Y’: U1 is updated; otherwise: U1 is not updated.
injobu2= ‘Y’: U2 is updated; otherwise: U2 is not updated.
injobv1t= ‘Y’: V1T is updated; otherwise: V1T is not updated.
injobv2t= ‘Y’: V2T is updated; otherwise: V2T is not updated.
intrans= ‘T’: X, U1, U2, V1T, and V2T are stored in row-major order; otherwise: they are stored in column-major order.
inmThe number of rows and columns in X.
inpThe number of rows in the top-left block of X. 0 <= p <= m.
inqThe number of columns in the top-left block of X. 0 <= q <= min(p, m-p, m-q).
inoutthetaDouble precision array, dimension (q).
inoutphiDouble precision array, dimension (q-1).
inoutU1Double precision array, dimension (ldu1, p).
inldu1The leading dimension of U1. ldu1 >= max(1, p).
inoutU2Double precision array, dimension (ldu2, m-p).
inldu2The leading dimension of U2. ldu2 >= max(1, m-p).
inoutV1TDouble precision array, dimension (ldv1t, q).
inldv1tThe leading dimension of V1T. ldv1t >= max(1, q).
inoutV2TDouble precision array, dimension (ldv2t, m-q).
inldv2tThe leading dimension of V2T. ldv2t >= max(1, m-q).
outB11DDouble precision array, dimension (q).
outB11EDouble precision array, dimension (q-1).
outB12DDouble precision array, dimension (q).
outB12EDouble precision array, dimension (q-1).
outB21DDouble precision array, dimension (q).
outB21EDouble precision array, dimension (q-1).
outB22DDouble precision array, dimension (q).
outB22EDouble precision array, dimension (q-1).
outworkDouble precision array, dimension (lwork).
inlworkThe dimension of the array work. lwork >= max(1, 8*q). If lwork = -1, then a workspace query is assumed.
outinfo= 0: successful exit
< 0: if info = -i, the i-th argument had an illegal value
> 0: if SBBCSD did not converge, info specifies the number of nonzero entries in PHI.
void sbbcsd(
const char* jobu1,
const char* jobu2,
const char* jobv1t,
const char* jobv2t,
const char* trans,
const INT m,
const INT p,
const INT q,
f32* restrict theta,
f32* restrict phi,
f32* restrict U1,
const INT ldu1,
f32* restrict U2,
const INT ldu2,
f32* restrict V1T,
const INT ldv1t,
f32* restrict V2T,
const INT ldv2t,
f32* restrict B11D,
f32* restrict B11E,
f32* restrict B12D,
f32* restrict B12E,
f32* restrict B21D,
f32* restrict B21E,
f32* restrict B22D,
f32* restrict B22E,
f32* restrict work,
const INT lwork,
INT* info
);
Functions
-
void dbbcsd(const char *jobu1, const char *jobu2, const char *jobv1t, const char *jobv2t, const char *trans, const INT m, const INT p, const INT q, f64 *restrict theta, f64 *restrict phi, f64 *restrict U1, const INT ldu1, f64 *restrict U2, const INT ldu2, f64 *restrict V1T, const INT ldv1t, f64 *restrict V2T, const INT ldv2t, f64 *restrict B11D, f64 *restrict B11E, f64 *restrict B12D, f64 *restrict B12E, f64 *restrict B21D, f64 *restrict B21E, f64 *restrict B22D, f64 *restrict B22E, f64 *restrict work, const INT lwork, INT *info)#
DBBCSD computes the CS decomposition of an orthogonal matrix in bidiagonal-block form.
X is M-by-M, its top-left block is P-by-Q, and Q must be no larger than P, M-P, or M-Q.
Parameters
injobu1= ‘Y’: U1 is updated; otherwise: U1 is not updated.
injobu2= ‘Y’: U2 is updated; otherwise: U2 is not updated.
injobv1t= ‘Y’: V1T is updated; otherwise: V1T is not updated.
injobv2t= ‘Y’: V2T is updated; otherwise: V2T is not updated.
intrans= ‘T’: X, U1, U2, V1T, and V2T are stored in row-major order; otherwise: they are stored in column-major order.
inmThe number of rows and columns in X.
inpThe number of rows in the top-left block of X. 0 <= p <= m.
inqThe number of columns in the top-left block of X. 0 <= q <= min(p, m-p, m-q).
inoutthetaDouble precision array, dimension (q).
inoutphiDouble precision array, dimension (q-1).
inoutU1Double precision array, dimension (ldu1, p).
inldu1The leading dimension of U1. ldu1 >= max(1, p).
inoutU2Double precision array, dimension (ldu2, m-p).
inldu2The leading dimension of U2. ldu2 >= max(1, m-p).
inoutV1TDouble precision array, dimension (ldv1t, q).
inldv1tThe leading dimension of V1T. ldv1t >= max(1, q).
inoutV2TDouble precision array, dimension (ldv2t, m-q).
inldv2tThe leading dimension of V2T. ldv2t >= max(1, m-q).
outB11DDouble precision array, dimension (q).
outB11EDouble precision array, dimension (q-1).
outB12DDouble precision array, dimension (q).
outB12EDouble precision array, dimension (q-1).
outB21DDouble precision array, dimension (q).
outB21EDouble precision array, dimension (q-1).
outB22DDouble precision array, dimension (q).
outB22EDouble precision array, dimension (q-1).
outworkDouble precision array, dimension (lwork).
inlworkThe dimension of the array work. lwork >= max(1, 8*q). If lwork = -1, then a workspace query is assumed.
outinfo= 0: successful exit
< 0: if info = -i, the i-th argument had an illegal value
> 0: if DBBCSD did not converge, info specifies the number of nonzero entries in PHI.
void dbbcsd(
const char* jobu1,
const char* jobu2,
const char* jobv1t,
const char* jobv2t,
const char* trans,
const INT m,
const INT p,
const INT q,
f64* restrict theta,
f64* restrict phi,
f64* restrict U1,
const INT ldu1,
f64* restrict U2,
const INT ldu2,
f64* restrict V1T,
const INT ldv1t,
f64* restrict V2T,
const INT ldv2t,
f64* restrict B11D,
f64* restrict B11E,
f64* restrict B12D,
f64* restrict B12E,
f64* restrict B21D,
f64* restrict B21E,
f64* restrict B22D,
f64* restrict B22E,
f64* restrict work,
const INT lwork,
INT* info
);
Functions
-
void cbbcsd(const char *jobu1, const char *jobu2, const char *jobv1t, const char *jobv2t, const char *trans, const INT m, const INT p, const INT q, f32 *restrict theta, f32 *restrict phi, c64 *restrict U1, const INT ldu1, c64 *restrict U2, const INT ldu2, c64 *restrict V1T, const INT ldv1t, c64 *restrict V2T, const INT ldv2t, f32 *restrict B11D, f32 *restrict B11E, f32 *restrict B12D, f32 *restrict B12E, f32 *restrict B21D, f32 *restrict B21E, f32 *restrict B22D, f32 *restrict B22E, f32 *restrict rwork, const INT lrwork, INT *info)#
CBBCSD computes the CS decomposition of a unitary matrix in bidiagonal-block form.
X is M-by-M, its top-left block is P-by-Q, and Q must be no larger than P, M-P, or M-Q.
Parameters
injobu1= ‘Y’: U1 is updated; otherwise: U1 is not updated.
injobu2= ‘Y’: U2 is updated; otherwise: U2 is not updated.
injobv1t= ‘Y’: V1T is updated; otherwise: V1T is not updated.
injobv2t= ‘Y’: V2T is updated; otherwise: V2T is not updated.
intrans= ‘T’: X, U1, U2, V1T, and V2T are stored in row-major order; otherwise: they are stored in column-major order.
inmThe number of rows and columns in X.
inpThe number of rows in the top-left block of X. 0 <= p <= m.
inqThe number of columns in the top-left block of X. 0 <= q <= min(p, m-p, m-q).
inoutthetaSingle precision array, dimension (q).
inoutphiSingle precision array, dimension (q-1).
inoutU1Complex*16 array, dimension (ldu1, p).
inldu1The leading dimension of U1. ldu1 >= max(1, p).
inoutU2Complex*16 array, dimension (ldu2, m-p).
inldu2The leading dimension of U2. ldu2 >= max(1, m-p).
inoutV1TComplex*16 array, dimension (ldv1t, q).
inldv1tThe leading dimension of V1T. ldv1t >= max(1, q).
inoutV2TComplex*16 array, dimension (ldv2t, m-q).
inldv2tThe leading dimension of V2T. ldv2t >= max(1, m-q).
outB11DSingle precision array, dimension (q).
outB11ESingle precision array, dimension (q-1).
outB12DSingle precision array, dimension (q).
outB12ESingle precision array, dimension (q-1).
outB21DSingle precision array, dimension (q).
outB21ESingle precision array, dimension (q-1).
outB22DSingle precision array, dimension (q).
outB22ESingle precision array, dimension (q-1).
outrworkSingle precision array, dimension (lrwork).
inlrworkThe dimension of the array rwork. lrwork >= max(1, 8*q). If lrwork = -1, then a workspace query is assumed.
outinfo= 0: successful exit
< 0: if info = -i, the i-th argument had an illegal value
> 0: if CBBCSD did not converge, info specifies the number of nonzero entries in PHI.
void cbbcsd(
const char* jobu1,
const char* jobu2,
const char* jobv1t,
const char* jobv2t,
const char* trans,
const INT m,
const INT p,
const INT q,
f32* restrict theta,
f32* restrict phi,
c64* restrict U1,
const INT ldu1,
c64* restrict U2,
const INT ldu2,
c64* restrict V1T,
const INT ldv1t,
c64* restrict V2T,
const INT ldv2t,
f32* restrict B11D,
f32* restrict B11E,
f32* restrict B12D,
f32* restrict B12E,
f32* restrict B21D,
f32* restrict B21E,
f32* restrict B22D,
f32* restrict B22E,
f32* restrict rwork,
const INT lrwork,
INT* info
);
Functions
-
void zbbcsd(const char *jobu1, const char *jobu2, const char *jobv1t, const char *jobv2t, const char *trans, const INT m, const INT p, const INT q, f64 *restrict theta, f64 *restrict phi, c128 *restrict U1, const INT ldu1, c128 *restrict U2, const INT ldu2, c128 *restrict V1T, const INT ldv1t, c128 *restrict V2T, const INT ldv2t, f64 *restrict B11D, f64 *restrict B11E, f64 *restrict B12D, f64 *restrict B12E, f64 *restrict B21D, f64 *restrict B21E, f64 *restrict B22D, f64 *restrict B22E, f64 *restrict rwork, const INT lrwork, INT *info)#
ZBBCSD computes the CS decomposition of a unitary matrix in bidiagonal-block form.
X is M-by-M, its top-left block is P-by-Q, and Q must be no larger than P, M-P, or M-Q.
Parameters
injobu1= ‘Y’: U1 is updated; otherwise: U1 is not updated.
injobu2= ‘Y’: U2 is updated; otherwise: U2 is not updated.
injobv1t= ‘Y’: V1T is updated; otherwise: V1T is not updated.
injobv2t= ‘Y’: V2T is updated; otherwise: V2T is not updated.
intrans= ‘T’: X, U1, U2, V1T, and V2T are stored in row-major order; otherwise: they are stored in column-major order.
inmThe number of rows and columns in X.
inpThe number of rows in the top-left block of X. 0 <= p <= m.
inqThe number of columns in the top-left block of X. 0 <= q <= min(p, m-p, m-q).
inoutthetaDouble precision array, dimension (q).
inoutphiDouble precision array, dimension (q-1).
inoutU1Complex*16 array, dimension (ldu1, p).
inldu1The leading dimension of U1. ldu1 >= max(1, p).
inoutU2Complex*16 array, dimension (ldu2, m-p).
inldu2The leading dimension of U2. ldu2 >= max(1, m-p).
inoutV1TComplex*16 array, dimension (ldv1t, q).
inldv1tThe leading dimension of V1T. ldv1t >= max(1, q).
inoutV2TComplex*16 array, dimension (ldv2t, m-q).
inldv2tThe leading dimension of V2T. ldv2t >= max(1, m-q).
outB11DDouble precision array, dimension (q).
outB11EDouble precision array, dimension (q-1).
outB12DDouble precision array, dimension (q).
outB12EDouble precision array, dimension (q-1).
outB21DDouble precision array, dimension (q).
outB21EDouble precision array, dimension (q-1).
outB22DDouble precision array, dimension (q).
outB22EDouble precision array, dimension (q-1).
outrworkDouble precision array, dimension (lrwork).
inlrworkThe dimension of the array rwork. lrwork >= max(1, 8*q). If lrwork = -1, then a workspace query is assumed.
outinfo= 0: successful exit
< 0: if info = -i, the i-th argument had an illegal value
> 0: if ZBBCSD did not converge, info specifies the number of nonzero entries in PHI.
void zbbcsd(
const char* jobu1,
const char* jobu2,
const char* jobv1t,
const char* jobv2t,
const char* trans,
const INT m,
const INT p,
const INT q,
f64* restrict theta,
f64* restrict phi,
c128* restrict U1,
const INT ldu1,
c128* restrict U2,
const INT ldu2,
c128* restrict V1T,
const INT ldv1t,
c128* restrict V2T,
const INT ldv2t,
f64* restrict B11D,
f64* restrict B11E,
f64* restrict B12D,
f64* restrict B12E,
f64* restrict B21D,
f64* restrict B21E,
f64* restrict B22D,
f64* restrict B22E,
f64* restrict rwork,
const INT lrwork,
INT* info
);