Developer Reference

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

?hbevx

Computes selected eigenvalues and, optionally, eigenvectors of a Hermitian band matrix.

Syntax

lapack_int LAPACKE_chbevx
(
int
matrix_layout
,
char
jobz
,
char
range
,
char
uplo
,
lapack_int
n
,
lapack_int
kd
,
lapack_complex_float*
ab
,
lapack_int
ldab
,
lapack_complex_float*
q
,
lapack_int
ldq
,
float
vl
,
float
vu
,
lapack_int
il
,
lapack_int
iu
,
float
abstol
,
lapack_int*
m
,
float*
w
,
lapack_complex_float*
z
,
lapack_int
ldz
,
lapack_int*
ifail
);
lapack_int LAPACKE_zhbevx
(
int
matrix_layout
,
char
jobz
,
char
range
,
char
uplo
,
lapack_int
n
,
lapack_int
kd
,
lapack_complex_double*
ab
,
lapack_int
ldab
,
lapack_complex_double*
q
,
lapack_int
ldq
,
double
vl
,
double
vu
,
lapack_int
il
,
lapack_int
iu
,
double
abstol
,
lapack_int*
m
,
double*
w
,
lapack_complex_double*
z
,
lapack_int
ldz
,
lapack_int*
ifail
);
Include Files
  • mkl.h
Description
The routine computes selected eigenvalues and, optionally, eigenvectors of a complex Hermitian band matrix
A
. Eigenvalues and eigenvectors can be selected by specifying either a range of values or a range of indices for the desired eigenvalues.
Input Parameters
matrix_layout
Specifies whether matrix storage layout is row major (
LAPACK_ROW_MAJOR
) or column major (
LAPACK_COL_MAJOR
).
jobz
Must be
'N'
or
'V'
.
If
job
=
'N'
, then only eigenvalues are computed.
If
job
=
'V'
, then eigenvalues and eigenvectors are computed.
range
Must be
'A'
or
'V'
or
'I'
.
If
range
=
'A'
, the routine computes all eigenvalues.
If
range
=
'V'
, the routine computes eigenvalues
w
[
i
]
in the half-open interval:
vl
<
w
[
i
]
vu
.
If
range
=
'I'
, the routine computes eigenvalues with indices
il
to
iu
.
uplo
Must be
'U'
or
'L'
.
If
uplo
=
'U'
,
ab
stores the upper triangular part of
A
.
If
uplo
=
'L'
,
ab
stores the lower triangular part of
A
.
n
The order of the matrix
A
(
n
0
).
kd
The number of super- or sub-diagonals in
A
(
kd
0
).
ab
ab
(size at least max(1,
ldab
*
n
) for column major layout and at least max(1,
ldab
*(
kd
+ 1)) for row major layout)
is an array containing either upper or lower triangular part of the Hermitian matrix
A
(as specified by
uplo
) in band storage format.
ldab
The leading dimension of
ab
; must be at least
kd
+1
for column major layout and
n
for row major layout
.
vl
,
vu
If
range
=
'V'
, the lower and upper bounds of the interval to be searched for eigenvalues.
Constraint:
vl
<
vu
.
If
range
=
'A'
or
'I'
,
vl
and
vu
are not referenced.
il
,
iu
If
range
=
'I'
, the indices in ascending order of the smallest and largest eigenvalues to be returned.
Constraint:
1
il
iu
n
, if
n
> 0
;
il
=1
and
iu
=0
if
n
= 0
.
If
range
=
'A'
or
'V'
,
il
and
iu
are not referenced.
abstol
The absolute error tolerance to which each eigenvalue is required.
See
Application notes
for details on error tolerance.
ldq
,
ldz
The leading dimensions of the output arrays
q
and
z
, respectively.
Constraints:
ldq
1,
ldz
1
;
If
jobz
=
'V'
, then
ldq
max
(1,
n
) and
ldz
max
(1,
n
)
for column major layout and
ldz
max(1,
m
) for row major layout
.
Output Parameters
q
Array, size
max(1,
ldz
*
n
)
.
If
jobz
=
'V'
, the
n
-by-
n
unitary matrix is used in the reduction to tridiagonal form.
If
jobz
=
'N'
, the array
q
is not referenced.
m
The total number of eigenvalues found,
0
m
n
.
If
range
=
'A'
,
m
=
n
, if
range
=
'I'
,
m
=
iu
-
il
+1
, and if
range
=
'V'
, the exact value of
m
is not known in advance..
w
Array, size at least max(1,
n
). The first
m
elements contain the selected eigenvalues of the matrix
A
in ascending order.
z
Array
z
(size at least max(1,
ldz
*
m
) for column major layout and max(1,
ldz
*
n
) for row major layout)
.
If
jobz
=
'V'
, then if
info
= 0
, the first
m
columns of
z
contain the orthonormal eigenvectors of the matrix
A
corresponding to the selected eigenvalues, with the
i
-th column of
z
holding the eigenvector associated with
w
[
i
- 1]
.
If an eigenvector fails to converge, then that column of
z
contains the latest approximation to the eigenvector, and the index of the eigenvector is returned in
ifail
.
If
jobz
=
'N'
, then
z
is not referenced.
ab
On exit, this array is overwritten by the values generated during the reduction to tridiagonal form.
If
uplo
=
'U'
, the first superdiagonal and the diagonal of the tridiagonal matrix
T
are returned in rows
kd
and
kd
+1 of
ab
, and if
uplo
=
'L'
, the diagonal and first subdiagonal of
T
are returned in the first two rows of
ab
.
ifail
Array, size at least max(1,
n
).
If
jobz
=
'V'
, then if
info
= 0
, the first
m
elements of
ifail
are zero; if
info
> 0
, the
ifail
contains the indices of the eigenvectors that failed to converge.
If
jobz
=
'N'
, then
ifail
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
i
eigenvectors failed to converge; their indices are stored in the array
ifail
.
Application Notes
An approximate eigenvalue is accepted as converged when it is determined to lie in an interval [a,b] of width less than or equal to
abstol
+
ε
* max( |a|,|b| )
, where
ε
is the machine precision.
If
abstol
is less than or equal to zero, then
ε
*||
T
||
1
will be used in its place, where
T
is the tridiagonal matrix obtained by reducing
A
to tridiagonal form. Eigenvalues will be computed most accurately when
abstol
is set to twice the underflow threshold 2*
?lamch
('S'), not zero.
If this routine returns with
info
> 0
, indicating that some eigenvectors did not converge, try setting
abstol
to 2*
?lamch
('S').

Product and Performance Information

1

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