Computes the CS decomposition of a block-partitioned orthogonal/unitary matrix.
lapack_int LAPACKE_sorcsd2by1 (int matrix_layout, char jobu1, char jobu2, char jobv1t, lapack_int m, lapack_int p, lapack_int q, float * x11, lapack_int ldx11, float * x21, lapack_int ldx21, float * theta, float * u1, lapack_int ldu1, float * u2, lapack_int ldu2, float * v1t, lapack_int ldv1t);
lapack_int LAPACKE_dorcsd2by1 (int matrix_layout, char jobu1, char jobu2, char jobv1t, lapack_int m, lapack_int p, lapack_int q, double * x11, lapack_int ldx11, double * x21, lapack_int ldx21, double * theta, double * u1, lapack_int ldu1, double * u2, lapack_int ldu2, double * v1t, lapack_int ldv1t);
lapack_int LAPACKE_cuncsd2by1 (int matrix_layout, char jobu1, char jobu2, char jobv1t, lapack_int m, lapack_int p, lapack_int q, lapack_complex_float * x11, lapack_int ldx11, lapack_complex_float * x21, lapack_int ldx21, float * theta, lapack_complex_float * u1, lapack_int ldu1, lapack_complex_float * u2, lapack_int ldu2, lapack_complex_float * v1t, lapack_int ldv1t);
lapack_int LAPACKE_zuncsd2by1 (int matrix_layout, char jobu1, char jobu2, char jobv1t, lapack_int m, lapack_int p, lapack_int q, lapack_complex_double * x11, lapack_int ldx11, lapack_complex_double * x21, lapack_int ldx21, double * theta, lapack_complex_double * u1, lapack_int ldu1, lapack_complex_double * u2, lapack_int ldu2, lapack_complex_double * v1t, lapack_int ldv1t);
The routines ?orcsd2by1/?uncsd2by1 compute 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 orthogonal/unitary matrices u1, u2, v1, and v2 are p-by-p, (m-p)-by-(m-p), q-by-q, (m-q)-by-(m-q), respectively. C and S are r-by-r nonnegative diagonal matrices satisfying C2 + S2 = I, in which r = min(p,m-p,q,m-q).
Specifies whether matrix storage layout is row major (LAPACK_ROW_MAJOR) or column major (LAPACK_COL_MAJOR).
If equal to 'Y', then u1 is computed. Otherwise, u1 is not computed.
If equal to 'Y', then u2 is computed. Otherwise, u2 is not computed.
If equal to 'Y', then v1t is computed. Otherwise, v1t is not computed.
The number of rows and columns of the matrix X.
The number of rows in x11. 0 ≤p≤m.
The number of columns in x11 . 0 ≤q≤m.
Array, size (ldx11*q).
On entry, the part of the orthogonal matrix whose CSD is desired.
The leading dimension of the array x11. ldx11≥ max(1,p).
Array, size (ldx21*q).
On entry, the part of the orthogonal matrix whose CSD is desired.
The leading dimension of the array X. ldx21≥ max(1,m - p).
The leading dimension of the array u1. If jobu1 = 'Y', ldu1≥ max(1,p).
The leading dimension of the array u2. If jobu2 = 'Y', ldu2≥ max(1,m-p).
The leading dimension of the array v1t. If jobv1t = 'Y', ldv1t≥ max(1,q).
Array, size 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)) ).
Array, size (ldu1*p) .
If jobu1 = 'Y', u1 contains the p-by-p orthogonal/unitary matrix u1.
Array, size (ldu2*(m - p)) .
If jobu2 = 'Y', u2 contains the (m-p)-by-(m-p) orthogonal/unitary matrix u2.
Array, size (ldv1t*q) .
If jobv1t = 'Y', v1t contains the q-by-q orthogonal matrix v1T or unitary matrix v1H.
This function returns a value info.
= 0: successful exit
< 0: if info = -i, the i-th argument has an illegal value
> 0: ?orcsd2by1/?uncsd2by1 did not converge.