Developer Reference for Intel® oneAPI Math Kernel Library for C

ID 766684
Date 11/07/2023
Public

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

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 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 )

Non-zero : the full Schur form T is required;

Zero : only eigenvalues are required.

wantz

(global )

Non-zero : the matrix of Schur vectors Z is required;

Zero: Schur vectors are not required.

n

(global )

The order of the Hessenberg matrix H (and Z if wantzis non-zero). n 0.

ilo, ihi

(global )

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, and then passed to p?gehrd 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 iloihin.

If n = 0, then ilo = 1 and ihi = 0.

h

(global ) array of size lld_h * LOCc(n)

The upper Hessenberg matrix H.

desch

(global and local )

Array of size dlen_.

The array descriptor for the distributed matrix H.

iloz, ihiz

Specify the rows of the matrix Z to which transformations must be applied if wantz is non-zero, 1 ilozilo; ihiihizn.

z

Array of size lld_z * LOCc(n).

If wantz is non-zero, contains the matrix Z.

If wantzequals zero, z is not referenced.

descz

(global and local ) array of size dlen_.

The array descriptor for the distributed matrix Z.

work

(local workspace) array of size lwork

lwork

(local )

The length of the workspace array work.

iwork

(local workspace) array of size liwork

liwork

(local )

The length of the workspace array iwork.

reclevel

(local )

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 wanttequals zero, the contents of h are unspecified on exit.

wr, wi

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:ihiz) is replaced by Z(ilo:ihi,iloz:ihiz)*U, when U is the orthogonal/unitary Schur factor of H(ilo:ihi,ilo:ihi).

If wantzequals zero, then z is not defined.

work[0]

On exit, if info = 0, work[0] returns the optimal lwork.

iwork[0]

On exit, if info = 0, iwork[0] returns the optimal liwork.

info

> 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 wanttequals 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 H.

> 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 wantzequals zero, then z is not accessed.

See Also