Contents

# ?orcsd/?uncsd

Computes the CS decomposition of a block-partitioned orthogonal/unitary matrix.

## Syntax

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
, 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
u
1
is computed. Otherwise,
u
1
is not computed.
jobu2
If equals
Y
, then
u
2
is computed. Otherwise,
u
2
is not computed.
jobv1t
If equals
Y
, then
v
1
t
is computed. Otherwise,
v
1
t
is not computed.
jobv2t
If equals
Y
, then
v
2
t
is computed. Otherwise,
v
2
t
is not computed.
trans
= '
T
':
x
,
u
1
,
u
2
,
v
1
t
,
v
2
t
are stored in row-major order.
otherwise
x
,
u
1
,
u
2
,
v
1
t
,
v
2
t
are stored in column-major order.
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 matrix
X
.
p
The number of rows in
x
11
and
x
12
.
0
p
m
.
q
The number of columns in
x
11
and
x
21
.
0
q
m
.
x11
,
x12
,
x21
,
x22
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
u
1
. If
jobu1
= '
Y
',
ldu1
max(1,
p
)
.
ldu2
The leading dimension of the array
u
2
. 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
)
.
Output Parameters
theta
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]
) )
.
u1
Array,
size at least max(1,
ldu1
*
p
)
.
If
jobu1
= '
Y
',
u1
contains the
p
-by-
p
orthogonal/unitary matrix
u
1
.
u2
Array, size
at least max(1,
ldu2
*(
m
-
p
))
.
If
jobu2
= '
Y
',
u2
contains the (
m
-
p
)-by-(
m
-
p
) orthogonal/unitary matrix
u
2
.
v1t
Array, size
at least max(1,
ldv1t
*
q
)
.
If
jobv1t
= '
Y
',
v1t
contains the
q
-by-
q
orthogonal matrix
v
1
T
or unitary matrix
v
1
H
.
v2t
Array, size
at least max(1,
ldv2t
*(
m
-
q
))
.
If
jobv2t
= '
Y
',
v2t
contains the (
m
-
q
)-by-(
m
-
q
) orthogonal matrix
v
2
T
or unitary matrix
v
2
H
.
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.