Developer Reference

Contents

?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
:
Equation
or unitary matrix:
Equation
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.

Product and Performance Information

1

Intel's compilers may or may not optimize to the same degree for non-Intel microprocessors for optimizations that are not unique to Intel microprocessors. These optimizations include SSE2, SSE3, and SSSE3 instruction sets and other optimizations. Intel does not guarantee the availability, functionality, or effectiveness of any optimization on microprocessors not manufactured by Intel. Microprocessor-dependent optimizations in this product are intended for use with Intel microprocessors. Certain optimizations not specific to Intel microarchitecture are reserved for Intel microprocessors. Please refer to the applicable product User and Reference Guides for more information regarding the specific instruction sets covered by this notice.

Notice revision #20110804