Developer Reference for Intel® oneAPI Math Kernel Library for C

ID 766684
Date 10/31/2024
Public
Document Table of Contents

?hgeqz

Implements the QZ method for finding the generalized eigenvalues of the matrix pair (H,T).

Syntax

lapack_int LAPACKE_shgeqz( int matrix_layout, char job, char compq, char compz, lapack_int n, lapack_int ilo, lapack_int ihi, float* h, lapack_int ldh, float* t, lapack_int ldt, float* alphar, float* alphai, float* beta, float* q, lapack_int ldq, float* z, lapack_int ldz );

lapack_int LAPACKE_dhgeqz( int matrix_layout, char job, char compq, char compz, lapack_int n, lapack_int ilo, lapack_int ihi, double* h, lapack_int ldh, double* t, lapack_int ldt, double* alphar, double* alphai, double* beta, double* q, lapack_int ldq, double* z, lapack_int ldz );

lapack_int LAPACKE_chgeqz( int matrix_layout, char job, char compq, char compz, lapack_int n, lapack_int ilo, lapack_int ihi, lapack_complex_float* h, lapack_int ldh, lapack_complex_float* t, lapack_int ldt, lapack_complex_float* alpha, lapack_complex_float* beta, lapack_complex_float* q, lapack_int ldq, lapack_complex_float* z, lapack_int ldz );

lapack_int LAPACKE_zhgeqz( int matrix_layout, char job, char compq, char compz, lapack_int n, lapack_int ilo, lapack_int ihi, lapack_complex_double* h, lapack_int ldh, lapack_complex_double* t, lapack_int ldt, lapack_complex_double* alpha, lapack_complex_double* beta, lapack_complex_double* q, lapack_int ldq, lapack_complex_double* z, lapack_int ldz );

Include Files

  • mkl.h

Description

The routine computes the eigenvalues of a real/complex matrix pair (H,T), where H is an upper Hessenberg matrix and T is upper triangular, using the double-shift version (for real flavors) or single-shift version (for complex flavors) of the QZ method. Matrix pairs of this type are produced by the reduction to generalized upper Hessenberg form of a real/complex matrix pair (A,B):

A = Q1*H*Z1H, B = Q1*T*Z1H,

as computed by ?gghrd.

For real flavors:

If job = 'S', then the Hessenberg-triangular pair (H,T) is reduced to generalized Schur form,

H = Q*S*ZT, T = Q*P*ZT,

where Q and Z are orthogonal matrices, P is an upper triangular matrix, and S is a quasi-triangular matrix with 1-by-1 and 2-by-2 diagonal blocks. The 1-by-1 blocks correspond to real eigenvalues of the matrix pair (H,T) and the 2-by-2 blocks correspond to complex conjugate pairs of eigenvalues.

Additionally, the 2-by-2 upper triangular diagonal blocks of P corresponding to 2-by-2 blocks of S are reduced to positive diagonal form, that is, if Sj + 1, j is non-zero, then Pj + 1, j = Pj, j + 1 = 0, Pj, j > 0, and Pj + 1, j + 1 > 0.

For complex flavors:

If job = 'S', then the Hessenberg-triangular pair (H,T) is reduced to generalized Schur form,

H = Q* S*ZH, T = Q*P*ZH,

where Q and Z are unitary matrices, and S and P are upper triangular.

For all function flavors:

Optionally, the orthogonal/unitary matrix Q from the generalized Schur factorization may be post-multiplied by an input matrix Q1, and the orthogonal/unitary matrix Z may be post-multiplied by an input matrix Z1.

If Q1 and Z1 are the orthogonal/unitary matrices from ?gghrd that reduced the matrix pair (A,B) to generalized upper Hessenberg form, then the output matrices Q1Q and Z1Z are the orthogonal/unitary factors from the generalized Schur factorization of (A,B):

A = (Q1Q)*S *(Z1Z)H, B = (Q1Q)*P*(Z1Z)H.

To avoid overflow, eigenvalues of the matrix pair (H,T) (equivalently, of (A,B)) are computed as a pair of values (alpha,beta). For chgeqz/zhgeqz, alpha and beta are complex, and for shgeqz/dhgeqz, alpha is complex and beta real. If beta is nonzero, λ = alpha/beta is an eigenvalue of the generalized nonsymmetric eigenvalue problem (GNEP)

A*x = λ*B*x

and if alpha is nonzero, μ = beta/alpha is an eigenvalue of the alternate form of the GNEP

μ*A*y = B*y .

Real eigenvalues (for real flavors) or the values of alpha and beta for the i-th eigenvalue (for complex flavors) can be read directly from the generalized Schur form:

alpha = Si, i, beta = Pi, i.

Input Parameters

matrix_layout

Specifies whether matrix storage layout is row major (LAPACK_ROW_MAJOR) or column major (LAPACK_COL_MAJOR).

job

Specifies the operations to be performed. Must be 'E' or 'S'.

If job = 'E', then compute eigenvalues only;

If job = 'S', then compute eigenvalues and the Schur form.

compq

Must be 'N', 'I', or 'V'.

If compq = 'N', left Schur vectors (q) are not computed;

If compq = 'I', q is initialized to the unit matrix and the matrix of left Schur vectors of (H,T) is returned;

If compq = 'V', q must contain an orthogonal/unitary matrix Q1 on entry and the product Q1*Q is returned.

compz

Must be 'N', 'I', or 'V'.

If compz = 'N', right Schur vectors (z) are not computed;

If compz = 'I', z is initialized to the unit matrix and the matrix of right Schur vectors of (H,T) is returned;

If compz = 'V', z must contain an orthogonal/unitary matrix Z1 on entry and the product Z1*Z is returned.

n

The order of the matrices H, T, Q, and Z

(n 0).

ilo, ihi

ilo and ihi mark the rows and columns of H which are in Hessenberg form. It is assumed that H is already upper triangular in rows and columns 1:ilo-1 and ihi+1:n.

Constraint:

If n > 0, then 1 iloihin;

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

h, t, q, z

Arrays:

On entry, h (size max(1, ldh*n)) contains the n-by-n upper Hessenberg matrix H.

On entry, t (size max(1, ldt*n)) contains the n-by-n upper triangular matrix T.

q (size max(1, ldq*n)) :

On entry, if compq = 'V', this array contains the orthogonal/unitary matrix Q1 used in the reduction of (A,B) to generalized Hessenberg form.

If compq = 'N', then q is not referenced.

z (size max(1, ldz*n)) :

On entry, if compz = 'V', this array contains the orthogonal/unitary matrix Z1 used in the reduction of (A,B) to generalized Hessenberg form.

If compz = 'N', then z is not referenced.

ldh

The leading dimension of h; at least max(1, n).

ldt

The leading dimension of t; at least max(1, n).

ldq

The leading dimension of q;

If compq = 'N', then ldq 1.

If compq = 'I'or 'V', then ldq max(1, n).

ldz

The leading dimension of z;

If compq = 'N', then ldz 1.

If compq = 'I'or 'V', then ldz max(1, n).

Output Parameters

h

For real flavors:

If job = 'S', then on exit h contains the upper quasi-triangular matrix S from the generalized Schur factorization.

If job = 'E', then on exit the diagonal blocks of h match those of S, but the rest of h is unspecified.

For complex flavors:

If job = 'S', then, on exit, h contains the upper triangular matrix S from the generalized Schur factorization.

If job = 'E', then on exit the diagonal of h matches that of S, but the rest of h is unspecified.

t

If job = 'S', then, on exit, t contains the upper triangular matrix P from the generalized Schur factorization.

For real flavors:

2-by-2 diagonal blocks of P corresponding to 2-by-2 blocks of S are reduced to positive diagonal form, that is, if h(j+1,j) is non-zero, then t(j+1,j)=t(j,j+1)=0 and t(j,j) and t(j+1,j+1) will be positive.

If job = 'E', then on exit the diagonal blocks of t match those of P, but the rest of t is unspecified.

For complex flavors:

if job = 'E', then on exit the diagonal of t matches that of P, but the rest of t is unspecified.

alphar, alphai

Arrays, size at least max(1, n). The real and imaginary parts, respectively, of each scalar alpha defining an eigenvalue of GNEP.

If alphai[j - 1] is zero, then the j-th eigenvalue is real; if positive, then the j-th and (j+1)-th eigenvalues are a complex conjugate pair, with

alphai[j] = -alphai[j - 1].

alpha

Array, size at least max(1, n).

The complex scalars alpha that define the eigenvalues of GNEP. alphai[i - 1] = Si, i in the generalized Schur factorization.

beta

Array, size at least max(1, n).

For real flavors:

The scalars beta that define the eigenvalues of GNEP.

Together, the quantities alpha = (alphar[j - 1], alphai[j - 1]) and beta = beta[j - 1] represent the j-th eigenvalue of the matrix pair (A,B), in one of the forms lambda = alpha/beta or mu = beta/alpha. Since either lambda or mu may overflow, they should not, in general, be computed.

For complex flavors:

The real non-negative scalars beta that define the eigenvalues of GNEP.

beta[i - 1] = Pi, i in the generalized Schur factorization. Together, the quantities alpha = alpha[j - 1] and beta = beta[j - 1] represent the j-th eigenvalue of the matrix pair (A,B), in one of the forms lambda = alpha/beta or mu = beta/alpha. Since either lambda or mu may overflow, they should not, in general, be computed.

q

On exit, if compq = 'I', q is overwritten by the orthogonal/unitary matrix of left Schur vectors of the pair (H,T), and if compq = 'V', q is overwritten by the orthogonal/unitary matrix of left Schur vectors of (A,B).

z

On exit, if compz = 'I', z is overwritten by the orthogonal/unitary matrix of right Schur vectors of the pair (H,T), and if compz = 'V', z is overwritten by the orthogonal/unitary matrix of right Schur vectors of (A,B).

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 = 1,..., n, the QZ iteration did not converge.

(H,T) is not in Schur form, but alphar[i - 1], alphai[i - 1] (for real flavors), alpha[i - 1] (for complex flavors), and beta[i - 1], i=info+1,..., n should be correct.

If info = n+1,...,2n, the shift calculation failed.

(H,T) is not in Schur form, but alphar[i - 1], alphai[i - 1] (for real flavors), alpha[i - 1] (for complex flavors), and beta[i - 1], i =info-n+1,..., n should be correct.