Developer Reference

  • 2021.1
  • 12/04/2020
  • Public Content
Contents

?gesdd

Computes the singular value decomposition of a general rectangular matrix using a divide and conquer method.

Syntax

lapack_int LAPACKE_sgesdd
(
int
matrix_layout
,
char
jobz
,
lapack_int
m
,
lapack_int
n
,
float*
a
,
lapack_int
lda
,
float*
s
,
float*
u
,
lapack_int
ldu
,
float*
vt
,
lapack_int
ldvt
);
lapack_int LAPACKE_dgesdd
(
int
matrix_layout
,
char
jobz
,
lapack_int
m
,
lapack_int
n
,
double*
a
,
lapack_int
lda
,
double*
s
,
double*
u
,
lapack_int
ldu
,
double*
vt
,
lapack_int
ldvt
);
lapack_int LAPACKE_cgesdd
(
int
matrix_layout
,
char
jobz
,
lapack_int
m
,
lapack_int
n
,
lapack_complex_float*
a
,
lapack_int
lda
,
float*
s
,
lapack_complex_float*
u
,
lapack_int
ldu
,
lapack_complex_float*
vt
,
lapack_int
ldvt
);
lapack_int LAPACKE_zgesdd
(
int
matrix_layout
,
char
jobz
,
lapack_int
m
,
lapack_int
n
,
lapack_complex_double*
a
,
lapack_int
lda
,
double*
s
,
lapack_complex_double*
u
,
lapack_int
ldu
,
lapack_complex_double*
vt
,
lapack_int
ldvt
);
Include Files
  • mkl.h
Description
The routine computes the singular value decomposition (SVD) of a real/complex
m
-by-
n
matrix
A
, optionally computing the left and/or right singular vectors.
If singular vectors are desired, it uses a divide-and-conquer algorithm. The SVD is written
A
=
U
*
Σ
*
V
T
for real routines,
A
=
U
*
Σ
*
V
H
for complex routines,
where
Σ
is an
m
-by-
n
matrix which is zero except for its min(
m
,
n
) diagonal elements,
U
is an
m
-by-
m
orthogonal/unitary matrix, and
V
is an
n
-by-
n
orthogonal/unitary matrix. The diagonal elements of
Σ
are the singular values of
A
; they are real and non-negative, and are returned in descending order. The first min(
m
,
n
) columns of
U
and
V
are the left and right singular vectors of
A
.
Note that the routine returns
vt
=
V
T
(for real flavors) or
vt
=
V
H
(for complex flavors), not
V
.
Input Parameters
matrix_layout
Specifies whether matrix storage layout is row major (
LAPACK_ROW_MAJOR
) or column major (
LAPACK_COL_MAJOR
).
jobz
Must be
'A'
,
'S'
,
'O'
, or
'N'
.
Specifies options for computing all or part of the matrices
U
and
V
.
If
jobz
=
'A'
, all
m
columns of
U
and all
n
rows of
V
T
or
V
H
are returned in the arrays
u
and
vt
;
if
jobz
=
'S'
, the first min(
m
,
n
) columns of
U
and the first min(
m
,
n
) rows of
V
T
or
V
H
are returned in the arrays
u
and
vt
;
if
jobz
=
'O'
, then
if
m
 
n
, the first
n
columns of
U
are overwritten in the array
a
and all rows of
V
T
or
V
H
are returned in the array
vt
;
if
m
<
n
, all columns of
U
are returned in the array
u
and the first
m
rows of
V
T
or
V
H
are overwritten in the array
a
;
if
jobz
=
'N'
, no columns of
U
or rows of
V
T
or
V
H
are computed.
m
The number of rows of the matrix
A
(
m
0
).
n
The number of columns in
A
(
n
 0).
a
a
(size max(1,
lda
*
n
) for column major layout and max(1,
lda
*
m
) for row major layout)
is an array containing the
m
-by-
n
matrix
A
.
lda
The leading dimension of the array
a
. Must be at least max(1,
m
)
for column major layout and at least max(1,
n
) for row major layout
.
ldu
,
ldvt
The leading dimensions of the output arrays
u
and
vt
, respectively.
The minimum size of
ldu
is
jobz
m
n
m
<
n
'N'
1
1
'A'
m
m
'S'
m
for column major layout;
n
for row major layout
m
'O'
1
m
The minimum size of
ldvt
is
jobz
m
n
m
<
n
'N'
1
1
'A'
n
n
'S'
n
m
for column major layout;
n
for row major layout
'O'
n
1
Output Parameters
a
On exit:
If
jobz
=
'O'
, then if
m
 
n
,
a
is overwritten with the first
n
columns of
U
(the left singular vectors, stored columnwise). If
m
<
n
,
a
is overwritten with the first
m
rows of
V
T
(the right singular vectors, stored rowwise);
If
jobz
'O'
, the contents of
a
are destroyed.
s
Array, size at least max(1, min(
m
,
n
)). Contains the singular values of
A
sorted so that
s
(i)
 
s
(i+1)
.
u
,
vt
Arrays:
Array
u
is of size:
jobz
m
n
m
<
n
'N'
1
1
'A'
max(1,
ldu
*
m
)
max(1,
ldu
*
m
)
'S'
max(1,
ldu
*
n
) for column major layout; max(1,
ldu
*
m
) for row major layout
max(1,
ldu
*
m
)
'O'
1
max(1,
ldu
*
m
)
If
jobz
=
'A'
or
jobz
=
'O'
and
m
<
n
,
u
contains the
m
-by-
m
orthogonal/unitary matrix
U
.
If
jobz
=
'S'
,
u
contains the first min(
m
,
n
) columns of
U
(the left singular vectors, stored columnwise).
If
jobz
=
'O'
and
m
n
, or
jobz
=
'N'
,
u
is not referenced.
Array
vt
is of size:
jobz
m
n
m
<
n
'N'
1
1
'A'
max(1,
ldvt
*
n
)
max(1,
ldvt
*
n
)
'S'
max(1,
ldvt
*
n
)
max(1,
ldvt
*
n
) for column major layout; max(1,
ldvt
*
m
) for row major layout;
'O'
max(1,
ldvt
*
n
)
1
If
jobz
=
'A'
or
jobz
=
'O'
and
m
n
,
vt
contains the
n
-by-
n
orthogonal/unitary matrix
V
T
.
If
jobz
=
'S'
,
vt
contains the first min(
m
,
n
) rows of
V
T
(the right singular vectors, stored rowwise).
If
jobz
=
'O'
and
m
<
n
, or
jobz
=
'N'
,
vt
is not referenced.
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.
If
info
=
i
, then
?bdsdc
did not converge, updating process failed.

Product and Performance Information

1

Performance varies by use, configuration and other factors. Learn more at www.Intel.com/PerformanceIndex.