Developer Reference for Intel® oneAPI Math Kernel Library for C
?orcsd/?uncsd
Computes the CS decomposition of a block-partitioned orthogonal/unitary matrix.
Syntax
lapack_int LAPACKE_sorcsd ( intmatrix_layout , charjobu1 , charjobu2 , charjobv1t , charjobv2t , chartrans , charsigns , lapack_intm , lapack_intp , lapack_intq , float*x11 , lapack_intldx11 , float*x12 , lapack_intldx12 , float*x21 , lapack_intldx21 , float*x22 , lapack_intldx22 , float*theta , float*u1 , lapack_intldu1 , float*u2 , lapack_intldu2 , float*v1t , lapack_intldv1t , float*v2t , lapack_intldv2t );
lapack_int LAPACKE_dorcsd ( intmatrix_layout , charjobu1 , charjobu2 , charjobv1t , charjobv2t , chartrans , charsigns , lapack_intm , lapack_intp , lapack_intq , double*x11 , lapack_intldx11 , double*x12 , lapack_intldx12 , double*x21 , lapack_intldx21 , double*x22 , lapack_intldx22 , double*theta , double*u1 , lapack_intldu1 , double*u2 , lapack_intldu2 , double*v1t , lapack_intldv1t , double*v2t , lapack_intldv2t );
lapack_int LAPACKE_cuncsd ( intmatrix_layout , charjobu1 , charjobu2 , charjobv1t , charjobv2t , chartrans , charsigns , lapack_intm , lapack_intp , lapack_intq , lapack_complex_float*x11 , lapack_intldx11 , lapack_complex_float*x12 , lapack_intldx12 , lapack_complex_float*x21 , lapack_intldx21 , lapack_complex_float*x22 , lapack_intldx22 , float*theta , lapack_complex_float*u1 , lapack_intldu1 , lapack_complex_float*u2 , lapack_intldu2 , lapack_complex_float*v1t , lapack_intldv1t , lapack_complex_float*v2t , lapack_intldv2t );
lapack_int LAPACKE_zuncsd ( intmatrix_layout , charjobu1 , charjobu2 , charjobv1t , charjobv2t , chartrans , charsigns , lapack_intm , lapack_intp , lapack_intq , lapack_complex_double*x11 , lapack_intldx11 , lapack_complex_double*x12 , lapack_intldx12 , lapack_complex_double*x21 , lapack_intldx21 , lapack_complex_double*x22 , lapack_intldx22 , double*theta , lapack_complex_double*u1 , lapack_intldu1 , lapack_complex_double*u2 , lapack_intldu2 , lapack_complex_double*v1t , lapack_intldv1t , lapack_complex_double*v2t , lapack_intldv2t );
Include Files
mkl.h
Description
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 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 equals Y , then u1 is computed. Otherwise, u1 is not computed.
jobu2
If equals Y , then u2 is computed. Otherwise, u2 is not computed.
jobv1t
If equals Y , then v1:code:`t` is computed. Otherwise, v1:code:`t` is not computed.
jobv2t
If equals Y , then v2:code:`t` is computed. Otherwise, v2:code:`t` is not computed.
- trans
-
CHARACTER
- signs
-
CHARACTER
m
The number of rows and columns of the matrix X .
p
The number of rows in x11 and x12 . 0 ≤p≤m .
q
The number of columns in x11 and x21 . 0 ≤q≤m .
- x11 , x12 , x21 , x22
-
REAL for sorcsd DOUBLE PRECISION for dorcsd COMPLEX for cuncsd DOUBLE COMPLEX for zuncsd 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.
ldx11 , ldx12 , ldx21 , ldx22
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 ).
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) .
ldv2t
The leading dimension of the array v2t . If jobv2t = ‘ Y ‘, ldv2t≥ max(1,m-q) .
- work
-
REAL for sorcsd DOUBLE PRECISION for dorcsd COMPLEX for cuncsd DOUBLE COMPLEX for zuncsd 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 cuncsd DOUBLE PRECISION for zuncsd 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 .
Output Parameters
- theta
-
REAL for sorcsd DOUBLE PRECISION for dorcsd COMPLEX for cuncsd DOUBLE COMPLEX for zuncsd
Array, size r , in which r = min(p,m-p,q,m-q) .
C = diag( cos(theta(1)[0]), ..., cos(theta(r)[r - 1]) ) , and
S = diag( sin(theta(1)[0]), ..., sin(theta(r)[r - 1]) ) .
- u1
-
REAL for sorcsd DOUBLE PRECISION for dorcsd COMPLEX for cuncsd DOUBLE COMPLEX for zuncsd
Array, size at least max(1, ldu1 * p ) .
If jobu1 = ‘ Y ‘, u1 contains the p -by- p orthogonal/unitary matrix u1 .
- u2
-
REAL for sorcsd DOUBLE PRECISION for dorcsd COMPLEX for cuncsd DOUBLE COMPLEX for zuncsd
Array, size at least max(1, ldu2 *( m - p )) .
If jobu2 = ‘ Y ‘, u2 contains the ( m - p )-by-( m - p ) orthogonal/unitary matrix u2 .
- v1t
-
REAL for sorcsd DOUBLE PRECISION for dorcsd COMPLEX for cuncsd DOUBLE COMPLEX for zuncsd
Array, size at least max(1, ldv1t * q ) .
If jobv1t = ‘ Y ‘, v1t contains the q -by- q orthogonal matrix v1:code:`T` or unitary matrix v1:code:`H` .
- v2t
-
REAL for sorcsd DOUBLE PRECISION for dorcsd COMPLEX for cuncsd DOUBLE COMPLEX for zuncsd
Array, size at least max(1, ldv2t *( m - q )) .
If jobv2t = ‘ Y ‘, v2t contains the ( m - q )-by-( m - q ) orthogonal matrix v2:code:`T` or unitary matrix v2:code:`H` .
- work
-
On exit,
- rwork
-
On exit,
Return Values
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.