Developer Reference for Intel® oneAPI Math Kernel Library for C
?orcsd2by1/?uncsd2by1
Computes the CS decomposition of a block-partitioned orthogonal/unitary matrix.
Syntax
lapack_intLAPACKE_sorcsd2by1 ( intmatrix_layout , charjobu1 , charjobu2 , charjobv1t , lapack_intm , lapack_intp , lapack_intq , float*x11 , lapack_intldx11 , float*x21 , lapack_intldx21 , float*theta , float*u1 , lapack_intldu1 , float*u2 , lapack_intldu2 , float*v1t , lapack_intldv1t );
lapack_intLAPACKE_dorcsd2by1 ( intmatrix_layout , charjobu1 , charjobu2 , charjobv1t , lapack_intm , lapack_intp , lapack_intq , double*x11 , lapack_intldx11 , double*x21 , lapack_intldx21 , double*theta , double*u1 , lapack_intldu1 , double*u2 , lapack_intldu2 , double*v1t , lapack_intldv1t );
lapack_intLAPACKE_cuncsd2by1 ( intmatrix_layout , charjobu1 , charjobu2 , charjobv1t , lapack_intm , lapack_intp , lapack_intq , lapack_complex_float*x11 , lapack_intldx11 , lapack_complex_float*x21 , lapack_intldx21 , float*theta , lapack_complex_float*u1 , lapack_intldu1 , lapack_complex_float*u2 , lapack_intldu2 , lapack_complex_float*v1t , lapack_intldv1t );
lapack_intLAPACKE_zuncsd2by1 ( intmatrix_layout , charjobu1 , charjobu2 , charjobv1t , lapack_intm , lapack_intp , lapack_intq , lapack_complex_double*x11 , lapack_intldx11 , lapack_complex_double*x21 , lapack_intldx21 , double*theta , lapack_complex_double*u1 , lapack_intldu1 , lapack_complex_double*u2 , lapack_intldu2 , lapack_complex_double*v1t , lapack_intldv1t );
Include Files
mkl.h
Description
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 C^{2} + S^{2} = I , in which r = min(p,m-p,q,m-q) .
Input Parameters
- matrix_layout
-
Specifies whether matrix storage layout is row major ( LAPACK_ROW_MAJOR ) or column major ( LAPACK_COL_MAJOR ).
jobu1
If equal to ‘Y’, then u1 is computed. Otherwise, u1 is not computed.
jobu2
If equal to ‘Y’, then u2 is computed. Otherwise, u2 is not computed.
jobv1t
If equal to ‘Y’, then v1:code:`t` is computed. Otherwise, v1:code:`t` is not computed.
m
The number of rows and columns of the matrix X .
p
The number of rows in x11 . 0 ≤p≤m .
q
The number of columns in x11 . 0 ≤q≤m .
- x11
-
REAL for sorcsd2by1 DOUBLE PRECISION for dorcsd2by1 COMPLEX for cuncsd2by1 DOUBLE COMPLEX for zuncsd2by1
Array, size ( ldx11 * q ) .
On entry, the part of the orthogonal matrix whose CSD is desired.
ldx11
The leading dimension of the array x11 . ldx11≥ max(1,p) .
- x21
-
REAL for sorcsd2by1 DOUBLE PRECISION for dorcsd2by1 COMPLEX for cuncsd2by1 DOUBLE COMPLEX for zuncsd2by1
Array, size ( ldx21 * q ) .
On entry, the part of the orthogonal matrix whose CSD is desired.
ldx21
The leading dimension of the array X . ldx21≥ max(1,m - p) .
ldu1
The leading dimension of the array u1 . If jobu1 = ‘ Y ‘, ldu1≥ max(1,p) .
ldu2
The leading dimension of the array u2 . If jobu2 = ‘ Y ‘, ldu2≥ max(1,m-p) .
ldv1t
The leading dimension of the array v1t . If jobv1t = ‘ Y ‘, ldv1t≥ max(1,q) .
- work
-
REAL for sorcsd2by1 DOUBLE PRECISION for dorcsd2by1 COMPLEX for cuncsd2by1 DOUBLE COMPLEX for zuncsd2by1 Workspace array, size ( max(1,lwork) ).
lwork
The size of the work array. Constraints:
If lwork = -1 , then a workspace query is assumed; the routine only calculates the optimal size of the work array, returns this value as the first entry of the work array, and no error message related to lwork is issued by xerbla .
- rwork
-
REAL for cuncsd2by1 DOUBLE PRECISION for zuncsd2by1 Workspace array, size ( max(1,lrwork) ).
lrwork
The size of the rwork array. Constraints:
If lrwork = -1 , then a workspace query is assumed; the routine only calculates the optimal size of the rwork array, returns this value as the first entry of the rwork array, and no error message related to lrwork is issued by xerbla .
iwork
Workspace array, dimension m - min(p, m - p, q, m - q) .
Output Parameters
- theta
-
REAL for sorcsd2by1 DOUBLE PRECISION for dorcsd2by1 COMPLEX for cuncsd2by1 DOUBLE COMPLEX for zuncsd2by1
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)) ) .
- u1
-
REAL for sorcsd2by1 DOUBLE PRECISION for dorcsd2by1 COMPLEX for cuncsd2by1 DOUBLE COMPLEX for zuncsd2by1
Array, size ( ldu1 * p ) .
If jobu1 = ‘ Y ‘, u1 contains the p -by- p orthogonal/unitary matrix u1 .
- u2
-
REAL for sorcsd2by1 DOUBLE PRECISION for dorcsd2by1 COMPLEX for cuncsd2by1 DOUBLE COMPLEX for zuncsd2by1
Array, size ( ldu2 *( m - p )) .
If jobu2 = ‘ Y ‘, u2 contains the ( m - p )-by-( m - p ) orthogonal/unitary matrix u2 .
- v1t
-
REAL for sorcsd2by1 DOUBLE PRECISION for dorcsd2by1 COMPLEX for cuncsd2by1 DOUBLE COMPLEX for zuncsd2by1
Array, size ( ldv1t * q ) .
If jobv1t = ‘ Y ‘, v1t contains the q -by- q orthogonal matrix v1:code:`T` or unitary matrix v1:code:`H` .
- work
-
On exit,
- rwork
-
On exit,
Return Values
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.