## Developer Reference

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

# ?ggsvp3

Performs preprocessing for a generalized SVD.

## Syntax

Include Files
• mkl_lapack.h
Include Files
• mkl.h
Description
?ggsvp3
computes orthogonal or unitary matrices
U
,
V
, and
Q
such that
for real flavors: if
m
-
k
-
l
0; if
m
-
k
-
l
< 0; for complex flavors: if
m
-
k
-
l
0; if
m
-
k
-
l
< 0; where the
k
-by-
k
matrix
A12
and
l
-by-
l
matrix
B13
are nonsingular upper triangular;
A23
is
l
-by-
l
upper triangular if
m
-
k
-
l
0, otherwise
A23
is (
m
-
k
-by-
l
upper trapezoidal.
k
+
l
= the effective numerical rank of the (
m
+
p
)-by-
n
matrix (
A
T
,
B
T
)
T
for real flavors or (
A
H
,
B
H
)
H
for complex flavors.
This decomposition is the preprocessing step for computing the Generalized Singular Value Decomposition (GSVD), see
?ggsvd3
.
Input Parameters
matrix_layout
Specifies whether matrix storage layout is row major (
LAPACK_ROW_MAJOR
) or column major (
LAPACK_COL_MAJOR
).
jobu
= 'U': Orthogonal/unitary matrix
U
is computed;
= 'N':
U
is not computed.
jobv
= 'V': Orthogonal/unitary matrix
V
is computed;
= 'N':
V
is not computed.
jobq
= 'Q': Orthogonal/unitary matrix
Q
is computed;
= 'N':
Q
is not computed.
m
The number of rows of the matrix
A
.
m
0.
p
The number of rows of the matrix
B
.
p
0.
n
The number of columns of the matrices
A
and B.
n
0.
a
Array, size
(
lda
*
n
)
.
On entry, the
m
-by-
n
matrix
A
.
lda
The leading dimension of the array
a
.
lda
max(1,
m
).
b
Array, size
(
ldb
*
n
)
.
On entry, the
p
-by-
n
matrix
B
.
ldb
The leading dimension of the array
b
.
ldb
max(1,
p
).
tola
,
tolb
tola
and
tolb
are the thresholds to determine the effective numerical rank of matrix
B
and a subblock of
A
. Generally, they are set to
tola
= max(
m
,
n
)*norm(
a
)*
MACHEPS
,
tolb
= max(
p
,
n
)*norm(
b
)*
MACHEPS
.
The size of
tola
and
tolb
may affect the size of backward errors of the decomposition.
ldu
The leading dimension of the array
u
.
ldu
max(1,
m
) if
jobu
= 'U';
ldu
1 otherwise.
ldv
The leading dimension of the array
v
.
ldv
max(1,
p
) if
jobv
= 'V';
ldv
1 otherwise.
ldq
The leading dimension of the array
q
.
ldq
max(1,
n
) if
jobq
= 'Q';
ldq
1 otherwise.
Output Parameters
a
On exit,
a
contains the triangular (or trapezoidal) matrix described in the Description section.
b
On exit,
b
contains the triangular matrix described in the Description section.
k
,
l
On exit,
k
and
l
specify the dimension of the subblocks described in Description section.
k
+
l
= effective numerical rank of (
A
T
,
B
T
)
T
for real flavors or (
A
H
,
B
H
)
H
for complex flavors.
u
Array, size
(
ldu
*
m
)
.
If
jobu
= 'U',
u
contains the orthogonal/unitary matrix
U
.
If
jobu
= 'N',
u
is not referenced.
v
Array, size
(
ldv
*
p
)
.
If
jobv
= 'V',
v
contains the orthogonal/unitary matrix
V
.
If
jobv
= 'N',
v
is not referenced.
q
Array, size
(
ldq
*
n
)
.
If
jobq
= 'Q',
q
contains the orthogonal/unitary matrix
Q
.
If
jobq
= 'N',
q
is not referenced.
Return Values
This function returns a value
info
.
= 0: successful exit.
< 0: if
info
= -
i
, the
i
-th argument had an illegal value.
Application Notes
The subroutine uses LAPACK subroutine
?geqp3
for the QR factorization with column pivoting to detect the effective numerical rank of the
A
matrix. It may be replaced by a better rank determination strategy.
?ggsvp3
replaces the deprecated subroutine
?ggsvp
.

#### Product and Performance Information

1

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