Intel® oneAPI Math Kernel Library Developer Reference - C
Computes the CS decomposition of a block-partitioned orthogonal/unitary matrix.
lapack_int LAPACKE_sorcsd( int matrix_layout, char jobu1, char jobu2, char jobv1t, char jobv2t, char trans, char signs, lapack_int m, lapack_int p, lapack_int q, float* x11, lapack_int ldx11, float* x12, lapack_int ldx12, float* x21, lapack_int ldx21, float* x22, lapack_int ldx22, float* theta, float* u1, lapack_int ldu1, float* u2, lapack_int ldu2, float* v1t, lapack_int ldv1t, float* v2t, lapack_int ldv2t );
lapack_int LAPACKE_dorcsd( int matrix_layout, char jobu1, char jobu2, char jobv1t, char jobv2t, char trans, char signs, lapack_int m, lapack_int p, lapack_int q, double* x11, lapack_int ldx11, double* x12, lapack_int ldx12, double* x21, lapack_int ldx21, double* x22, lapack_int ldx22, double* theta, double* u1, lapack_int ldu1, double* u2, lapack_int ldu2, double* v1t, lapack_int ldv1t, double* v2t, lapack_int ldv2t );
lapack_int LAPACKE_cuncsd( int matrix_layout, char jobu1, char jobu2, char jobv1t, char jobv2t, char trans, char signs, lapack_int m, lapack_int p, lapack_int q, lapack_complex_float* x11, lapack_int ldx11, lapack_complex_float* x12, lapack_int ldx12, lapack_complex_float* x21, lapack_int ldx21, lapack_complex_float* x22, lapack_int ldx22, float* theta, lapack_complex_float* u1, lapack_int ldu1, lapack_complex_float* u2, lapack_int ldu2, lapack_complex_float* v1t, lapack_int ldv1t, lapack_complex_float* v2t, lapack_int ldv2t );
lapack_int LAPACKE_zuncsd( int matrix_layout, char jobu1, char jobu2, char jobv1t, char jobv2t, char trans, char signs, lapack_int m, lapack_int p, lapack_int q, lapack_complex_double* x11, lapack_int ldx11, lapack_complex_double* x12, lapack_int ldx12, lapack_complex_double* x21, lapack_int ldx21, lapack_complex_double* x22, lapack_int ldx22, double* theta, lapack_complex_double* u1, lapack_int ldu1, lapack_complex_double* u2, lapack_int ldu2, lapack_complex_double* v1t, lapack_int ldv1t, lapack_complex_double* v2t, lapack_int ldv2t );
The routines ?orcsd/?uncsd compute the CS decomposition of an m-by-m partitioned orthogonal matrix X:
or unitary matrix:
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 equals Y, then u1 is computed. Otherwise, u1 is not computed.
If equals Y, then u2 is computed. Otherwise, u2 is not computed.
If equals Y, then v1t is computed. Otherwise, v1t is not computed.
If equals Y, then v2t is computed. Otherwise, v2t is not computed.
The number of rows and columns of the matrix X.
The number of rows in x11 and x12. 0 ≤p≤m.
The number of columns in x11 and x21. 0 ≤q≤m.
Arrays of size x11 (ldx11,q), x12 (ldx12,m - q), x21 (ldx21,q), and x22 (ldx22,m - q).
Contain the parts of the orthogonal/unitary matrix whose CSD is desired.
The leading dimensions of the parts of array X. ldx11≥ max(1, p), ldx12≥ max(1, p), ldx21≥ max(1, m - p), ldx22≥ 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).
The leading dimension of the array v2t. If jobv2t = 'Y', ldv2t≥ max(1,m-q).
Array, size r, in which r = min(p,m-p,q,m-q).
C = diag( cos(theta[0]), ..., cos(theta[r - 1]) ), and
S = diag( sin(theta[0]), ..., sin(theta[r - 1]) ).
Array, size at least max(1, ldu1*p).
If jobu1 = 'Y', u1 contains the p-by-p orthogonal/unitary matrix u1.
Array, size at least max(1, ldu2*(m - p)).
If jobu2 = 'Y', u2 contains the (m-p)-by-(m-p) orthogonal/unitary matrix u2.
Array, size at least max(1, ldv1t*q) .
If jobv1t = 'Y', v1t contains the q-by-q orthogonal matrix v1T or unitary matrix v1H.
Array, size at least max(1, ldv2t*(m - q)).
If jobv2t = 'Y', v2t contains the (m-q)-by-(m-q) orthogonal matrix v2T or unitary matrix v2H.
This function returns a value info.
If info=0, the execution is successful.
If info = -i, the i-th parameter had an illegal value.
> 0: ?orcsd/?uncsd did not converge.