?orcsd/?uncsd
?orcsd/?uncsd
Computes the CS decomposition of a block-partitioned
orthogonal/unitary matrix.
Syntax
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
);
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:

x
11
is p
-by-q
. The orthogonal/unitary matrices
u
1
,
u
2
, v
1
, and v
2
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
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 equalsY, thenu1is computed. Otherwise,u1is not computed.
- jobu2
- If equalsY, thenu2is computed. Otherwise,u2is not computed.
- jobv1t
- If equalsY, thenv1is computed. Otherwise,tv1is not computed.t
- jobv2t
- If equalsY, thenv2is computed. Otherwise,tv2is not computed.t
- trans
- = 'T':
- x,u1,u2,v1,tv2are stored in row-major order.t
- otherwise
- x,u1,u2,v1,tv2are stored in column-major order.t
- signs
- = 'O':
- The lower-left block is made nonpositive (the "other" convention).
- otherwise
- The upper-right block is made nonpositive (the "default" convention).
- m
- The number of rows and columns of the matrixX.
- p
- The number of rows inx11andx12.0.≤p≤m
- q
- The number of columns inx11andx21.0.≤q≤m
- x11,x12,x21,x22
- Arrays of sizex11(ldx11,q),x12(ldx12,m-q),x21(ldx21,q), andx22(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 arrayX.ldx11≥max(1,p),ldx12≥max(1,p),ldx21≥max(1,m-p),ldx22≥max(1,m-p).
- ldu1
- The leading dimension of the arrayu1. Ifjobu1= 'Y',.ldu1≥max(1,p)
- ldu2
- The leading dimension of the arrayu2. Ifjobu2= 'Y',.ldu2≥max(1,m-p)
- ldv1t
- The leading dimension of the arrayv1t. Ifjobv1t= 'Y',.ldv1t≥max(1,q)
- ldv2t
- The leading dimension of the arrayv2t. Ifjobv2t= 'Y',.ldv2t≥max(1,m-q)
Output Parameters
- theta
- Array,size, in whichr.r= min(p,m-p,q,m-q), andC= diag( cos(theta[0]), ..., cos(theta[) )r- 1].S= diag( sin(theta[0]), ..., sin(theta[) )r- 1]
- u1
- Array,size at least max(1,.ldu1*p)Ifjobu1= 'Y',u1contains thep-by-porthogonal/unitary matrixu1.
- u2
- Array, sizeat least max(1,.ldu2*(m-p))Ifjobu2= 'Y',u2contains the (m-p)-by-(m-p) orthogonal/unitary matrixu2.
- v1t
- Array, sizeat least max(1,.ldv1t*q)Ifjobv1t= 'Y',v1tcontains theq-by-qorthogonal matrixv1or unitary matrixTv1.H
- v2t
- Array, sizeat least max(1,.ldv2t*(m-q))Ifjobv2t= 'Y',v2tcontains the (m-q)-by-(m-q) orthogonal matrixv2or unitary matrixTv2.H
Return Values
This function returns a value
info
.If , the execution is successful.
info
=0If , the
info
= -i
i
-th parameter had an illegal value.> 0:
?orcsd
/?uncsd
did not converge.