Developer Reference for Intel® oneAPI Math Kernel Library for C
?hbevd
Computes all eigenvalues and, optionally, all eigenvectors of a complex Hermitian band matrix using divide and conquer algorithm.
Syntax
lapack_int LAPACKE_chbevd ( intmatrix_layout , charjobz , charuplo , lapack_intn , lapack_intkd , lapack_complex_float*ab , lapack_intldab , float*w , lapack_complex_float*z , lapack_intldz );
lapack_int LAPACKE_zhbevd ( intmatrix_layout , charjobz , charuplo , lapack_intn , lapack_intkd , lapack_complex_double*ab , lapack_intldab , double*w , lapack_complex_double*z , lapack_intldz );
Include Files
mkl.h
Description
chbevd zhbevd hbevd
The routine computes all the eigenvalues, and optionally all the eigenvectors, of a complex Hermitian band matrix A . In other words, it can compute the spectral factorization of A as: A = Z*Λ*Z^{H} .
Here Λ is a real diagonal matrix whose diagonal elements are the eigenvalues λ i , and Z is the (complex) unitary matrix whose columns are the eigenvectors zi . Thus,
A*z_{i} = λ_{i}*z_{i} for i = 1, 2, ..., n .
If the eigenvectors are requested, then this routine uses a divide and conquer algorithm to compute eigenvalues and eigenvectors. However, if only eigenvalues are required, then it uses the Pal-Walker-Kahan variant of the QL or QR algorithm.
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 jobz = 'N' , then only eigenvalues are computed. If jobz = 'V' , then eigenvalues and eigenvectors are computed.
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 , work
-
COMPLEX for chbevd DOUBLE COMPLEX for zhbevd . Arrays:
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.
The second dimension of ab must be at least max(1, n ). work (*) is a workspace array, its dimension max(1, lwork) .
ldab
The leading dimension of ab ; must be at least kd +1 for column major layout and n for row major layout .
ldz
The leading dimension of the output array z .
Constraints: if jobz = 'N' , then ldz≥ 1 ; if jobz = 'V' , then ldz ≥ max(1, n ) .
lwork
The dimension of the array work . Constraints: if n≤ 1 , then lwork≥ 1 ; if jobz = 'N' and n > 1 , then lwork≥n ; if jobz = 'V' and n > 1 , then lwork≥ 2*n^{2} . If lwork = -1 , then a workspace query is assumed; the routine only calculates the optimal size of the work , rwork and iwork arrays, returns these values as the first entries of the work , rwork and iwork arrays, and no error message related to lwork or lrwork or liwork is issued by xerbla . See Application Notes for details.
- rwork
-
REAL for chbevd DOUBLE PRECISION for zhbevd Workspace array, size at least lrwork .
lrwork
The dimension of the array rwork . Constraints: if n≤ 1 , then lrwork≥ 1 ; if jobz = 'N' and n > 1 , then lrwork≥n ; if jobz = 'V' and n > 1 , then lrwork≥ 2*n^{2} + 5*n + 1 . If lrwork = -1 , then a workspace query is assumed; the routine only calculates the optimal size of the work , rwork and iwork arrays, returns these values as the first entries of the work , rwork and iwork arrays, and no error message related to lwork or lrwork or liwork is issued by xerbla . See Application Notes for details.
iwork
Workspace array, size max(1, liwork) .
liwork
The dimension of the array iwork . Constraints: if jobz = 'N' or n≤ 1 , then liwork≥ 1 ; if jobz = 'V' and n > 1 , then liwork≥ 5*n+3 . If liwork = -1 , then a workspace query is assumed; the routine only calculates the optimal size of the work , rwork and iwork arrays, returns these values as the first entries of the work , rwork and iwork arrays, and no error message related to lwork or lrwork or liwork is issued by xerbla . See Application Notes for details.
Output Parameters
- w
-
REAL for chbevd DOUBLE PRECISION for zhbevd Array, size at least max(1, n ). If info = 0 , contains the eigenvalues of the matrix A in ascending order. See also info .
- z
-
COMPLEX for chbevd DOUBLE COMPLEX for zhbevd
Array, size max(1, ldz * n if job = 'V' and at least 1 if job = 'N' .
The second dimension of z must be: at least 1 if jobz = 'N' ; at least max(1, n ) if jobz = 'V' . If jobz = 'V' , then this array is overwritten by the unitary matrix Z which contains the eigenvectors of A . The i -th column of Z contains the eigenvector which corresponds to the eigenvalue w(i)w[i - 1] . 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.
- work(1)
-
On exit, if lwork > 0 , then the real part of work(1) returns the required minimal size of lwork .
- rwork(1)
-
On exit, if lrwork > 0 , then rwork(1) returns the required minimal size of lrwork .
- iwork(1)
-
On exit, if liwork > 0 , then iwork(1) returns the required minimal size of liwork .
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.
LAPACK 95 Interface Notes
There exist FORTRAN 77 and FORTRAN 95 interfaces for this routine. See the Intel® oneMKL Fortran Developer Reference for details.
Application Notes
The computed eigenvalues and eigenvectors are exact for a matrix \(A + E\) such that \(||E||_{2} = O(\varepsilon) ||A||_{2}\) , where \(\varepsilon\) is the machine precision.
The real analogue of this routine is sbevd .
See also heevd for matrices held in full storage, and hpevd for matrices held in packed storage.