orbdb#
Functions
-
void sorbdb(const char *trans, const char *signs, const INT m, const INT p, const INT q, f32 *restrict X11, const INT ldx11, f32 *restrict X12, const INT ldx12, f32 *restrict X21, const INT ldx21, f32 *restrict X22, const INT ldx22, f32 *restrict theta, f32 *restrict phi, f32 *restrict taup1, f32 *restrict taup2, f32 *restrict tauq1, f32 *restrict tauq2, f32 *restrict work, const INT lwork, INT *info)#
SORBDB simultaneously bidiagonalizes the blocks of an M-by-M partitioned orthogonal matrix X:
X = [——–—] = [———] [————-—] [———] . [ X21 | X22 ] [ | P2 ] [ B21 | B22 0 0 ] [ | Q2 ] [ 0 | 0 0 I ][ B11 | B12 0 0 ] [ X11 | X12 ] [ P1 | ] [ 0 | 0 -I 0 ] [ Q1 | ]**T
X11 is P-by-Q. Q must be no larger than P, M-P, or M-Q.
Parameters
intrans= ‘T’: X, U1, U2, V1T, and V2T are stored in row-major order; otherwise: X, U1, U2, V1T, and V2T are stored in column-major order.
insigns= ‘O’: The lower-left block is made nonpositive (the “other” convention); otherwise: The upper-right block is made nonpositive (the “default” convention).
inmThe number of rows and columns in X.
inpThe number of rows in X11 and X12. 0 <= p <= m.
inqThe number of columns in X11 and X21. 0 <= q <= min(p, m-p, m-q).
inoutX11Double precision array, dimension (ldx11, q).
inldx11The leading dimension of X11.
inoutX12Double precision array, dimension (ldx12, m-q).
inldx12The leading dimension of X12.
inoutX21Double precision array, dimension (ldx21, q).
inldx21The leading dimension of X21.
inoutX22Double precision array, dimension (ldx22, m-q).
inldx22The leading dimension of X22.
outthetaDouble precision array, dimension (q).
outphiDouble precision array, dimension (q-1).
outtaup1Double precision array, dimension (p).
outtaup2Double precision array, dimension (m-p).
outtauq1Double precision array, dimension (q).
outtauq2Double precision array, dimension (m-q).
outworkDouble precision array, dimension (lwork).
inlworkThe dimension of the array work. lwork >= m-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
void sorbdb(
const char* trans,
const char* signs,
const INT m,
const INT p,
const INT q,
f32* restrict X11,
const INT ldx11,
f32* restrict X12,
const INT ldx12,
f32* restrict X21,
const INT ldx21,
f32* restrict X22,
const INT ldx22,
f32* restrict theta,
f32* restrict phi,
f32* restrict taup1,
f32* restrict taup2,
f32* restrict tauq1,
f32* restrict tauq2,
f32* restrict work,
const INT lwork,
INT* info
);
Functions
-
void dorbdb(const char *trans, const char *signs, const INT m, const INT p, const INT q, f64 *restrict X11, const INT ldx11, f64 *restrict X12, const INT ldx12, f64 *restrict X21, const INT ldx21, f64 *restrict X22, const INT ldx22, f64 *restrict theta, f64 *restrict phi, f64 *restrict taup1, f64 *restrict taup2, f64 *restrict tauq1, f64 *restrict tauq2, f64 *restrict work, const INT lwork, INT *info)#
DORBDB simultaneously bidiagonalizes the blocks of an M-by-M partitioned orthogonal matrix X:
X = [——–—] = [———] [————-—] [———] . [ X21 | X22 ] [ | P2 ] [ B21 | B22 0 0 ] [ | Q2 ] [ 0 | 0 0 I ][ B11 | B12 0 0 ] [ X11 | X12 ] [ P1 | ] [ 0 | 0 -I 0 ] [ Q1 | ]**T
X11 is P-by-Q. Q must be no larger than P, M-P, or M-Q.
Parameters
intrans= ‘T’: X, U1, U2, V1T, and V2T are stored in row-major order; otherwise: X, U1, U2, V1T, and V2T are stored in column-major order.
insigns= ‘O’: The lower-left block is made nonpositive (the “other” convention); otherwise: The upper-right block is made nonpositive (the “default” convention).
inmThe number of rows and columns in X.
inpThe number of rows in X11 and X12. 0 <= p <= m.
inqThe number of columns in X11 and X21. 0 <= q <= min(p, m-p, m-q).
inoutX11Double precision array, dimension (ldx11, q).
inldx11The leading dimension of X11.
inoutX12Double precision array, dimension (ldx12, m-q).
inldx12The leading dimension of X12.
inoutX21Double precision array, dimension (ldx21, q).
inldx21The leading dimension of X21.
inoutX22Double precision array, dimension (ldx22, m-q).
inldx22The leading dimension of X22.
outthetaDouble precision array, dimension (q).
outphiDouble precision array, dimension (q-1).
outtaup1Double precision array, dimension (p).
outtaup2Double precision array, dimension (m-p).
outtauq1Double precision array, dimension (q).
outtauq2Double precision array, dimension (m-q).
outworkDouble precision array, dimension (lwork).
inlworkThe dimension of the array work. lwork >= m-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
void dorbdb(
const char* trans,
const char* signs,
const INT m,
const INT p,
const INT q,
f64* restrict X11,
const INT ldx11,
f64* restrict X12,
const INT ldx12,
f64* restrict X21,
const INT ldx21,
f64* restrict X22,
const INT ldx22,
f64* restrict theta,
f64* restrict phi,
f64* restrict taup1,
f64* restrict taup2,
f64* restrict tauq1,
f64* restrict tauq2,
f64* restrict work,
const INT lwork,
INT* info
);