Developer Reference for Intel® oneAPI Math Kernel Library for C
p?laqr0
Computes the eigenvalues of a Hessenberg matrix and optionally returns the matrices from the Schur decomposition.
Syntax
void pslaqr0 ( MKL_INT*wantt , MKL_INT*wantz , MKL_INT*n , MKL_INT*ilo , MKL_INT*ihi , float*h , MKL_INT*desch , float*wr , float*wi , MKL_INT*iloz , MKL_INT*ihiz , float*z , MKL_INT*descz , float*work , MKL_INT*lwork , MKL_INT*iwork , MKL_INT*liwork , MKL_INT*info , MKL_INT*reclevel );
void pdlaqr0 ( MKL_INT*wantt , MKL_INT*wantz , MKL_INT*n , MKL_INT*ilo , MKL_INT*ihi , double*h , MKL_INT*desch , double*wr , double*wi , MKL_INT*iloz , MKL_INT*ihiz , double*z , MKL_INT*descz , double*work , MKL_INT*lwork , MKL_INT*iwork , MKL_INT*liwork , MKL_INT*info , MKL_INT*reclevel );
Include Files
mkl_scalapack.h
Description
p?laqr0 computes the eigenvalues of a Hessenberg matrix H and, optionally, the matrices T and Z from the Schur decomposition H = Z * T * ZT , where T is an upper quasi-triangular matrix (the Schur form), and Z is the orthogonal matrix of Schur vectors.
Optionally Z may be postmultiplied into an input orthogonal matrix Q so that this routine function can give the Schur factorization of a matrix A which has been reduced to the Hessenberg form H by the orthogonal matrix Q : A = Q * H * QT = ( QZ ) * T * ( QZ ) T .
Input Parameters
- wantt
-
(global ) LOGICAL
= .TRUE. Non-zero : the full Schur form T is required;
= .FALSE. Zero : only eigenvalues are required.
- wantz
-
(global ) LOGICAL
= .TRUE. Non-zero : the matrix of Schur vectors Z is required;
= .FALSE. Zero : Schur vectors are not required.
- n
-
(global ) INTEGER
The order of the Hessenberg matrix H (and Z if wantz is non-zero ). n ≥ 0.
- ilo , ihi
-
(global ) INTEGER It is assumed that the matrix H is already upper triangular in rows and columns 1: ilo -1 and ihi +1: n . ilo and ihi are normally set by a previous call to p?gebal (Balances a general real/complex matrix.) , and then passed to p?gehrd (Reduces a general matrix to upper Hessenberg form.) when the matrix output by ihi is reduced to Hessenberg form. Otherwise ilo and ihi should be set to 1 and n , respectively. If n > 0, then 1 ≤ ilo ≤ ihi ≤ n . If n = 0, then ilo = 1 and ihi = 0.
- h
-
REAL for pslaqr0 DOUBLE PRECISION for pdlaqr0
(global ) array of size lld_h * LOCc ( n )
The upper Hessenberg matrix H .
- desch
-
(global and local ) INTEGER Array of size dlen_ . The array descriptor for the distributed matrix H .
- iloz , ihiz
-
INTEGER
Specify the rows of the matrix Z to which transformations must be applied if wantz is non-zero , 1 ≤ iloz ≤ ilo ; ihi ≤ ihiz ≤ n .
- z
-
REAL for pslaqr0 DOUBLE PRECISION for pdlaqr0
Array of size lld_z * LOCc ( n ) .
If wantz is non-zero , contains the matrix Z .
If wantz equals zero , z is not referenced.
- descz
-
(global and local ) INTEGER array of size dlen_ . The array descriptor for the distributed matrix Z .
- work
-
REAL for pslaqr0 DOUBLE PRECISION for pdlaqr0 (local workspace) array of size lwork
- lwork
-
(local ) INTEGER The length of the workspace array work .
- iwork
-
(local workspace) INTEGER array of size liwork
- liwork
-
(local ) INTEGER The length of the workspace array iwork .
- reclevel
-
(local ) INTEGER Level of recursion. reclevel = 0 must hold on entry.
OUTPUT Parameters
h
On exit, if wantt is non-zero , the matrix H is upper quasi-triangular in rows and columns ilo : ihi , with 1-by-1 and 2-by-2 blocks on the main diagonal. The 2-by-2 diagonal blocks (corresponding to complex conjugate pairs of eigenvalues) are returned in standard form, with H ( i , i ) = H ( i +1, i +1) and H ( i +1, i )* H ( i , i +1) < 0. If info = 0 and wantt equals zero , the contents of h are unspecified on exit.
- wr , wi
-
REAL for pslaqr0 DOUBLE PRECISION for pdlaqr0
The real and imaginary parts, respectively, of the computed eigenvalues ilo to ihi are stored in the corresponding elements of wr and wi . If two eigenvalues are computed as a complex conjugate pair, they are stored in consecutive elements of wr and wi , say the i -th and ( i +1)th, with wi [ i -1] > 0 and wi [ i ] < 0. If wantt is non-zero , the eigenvalues are stored in the same order as on the diagonal of the Schur form returned in h .
- z
-
Updated matrix with transformations applied only to the submatrix Z ( ilo : ihi , ilo : ihi ). If COMPZ = ‘I’, on exit, if info = 0, z contains the orthogonal matrix Z of the Schur vectors of H .
If wantz is non-zero , then Z ( ilo : ihi , iloz : ihi z) is replaced by Z ( ilo : ihi , iloz : ihiz )* U , when U is the orthogonal/unitary Schur factor of H ( ilo : ihi , ilo : ihi ).
If wantz equals zero , then z is not defined.
work (1) [0]
On exit, if info = 0, work [0] returns the optimal lwork .
iwork (1) [0]
On exit, if info = 0, iwork [0] returns the optimal liwork .
- info
-
INTEGER
> 0: if info = i , then the function failed to compute all the eigenvalues. Elements 0: ilo -2 and i : n -1 of wr and wi contain those eigenvalues which have been successfully computed.
> 0: if wantt equals zero , then the remaining unconverged eigenvalues are the eigenvalues of the upper Hessenberg matrix rows and columns ilo through ihi of the final output value of hH .
> 0: if wantt is non-zero , then (initial value of H )* U = U *(final value of H ), where U is an orthogonal/unitary matrix. The final value of H is upper Hessenberg and quasi-triangular/triangular in rows and columns info +1 through ihi .
> 0: if wantz is non-zero , then (final value of Z ( ilo : ihi , iloz : ihiz ))=(initial value of Z ( ilo : ihi , iloz : ihiz ))* U , where U is the orthogonal/unitary matrix in the previous expression (regardless of the value of wantt ).
> 0: if wantz equals zero , then z is not accessed.