Developer Reference for Intel® oneAPI Math Kernel Library for Fortran

ID 766686
Date 3/22/2024
Public
Document Table of Contents

?lasq2

Computes all the eigenvalues of the symmetric positive definite tridiagonal matrix associated with the quotient difference array z to high relative accuracy. Used by ?bdsqr and ?stegr.

Syntax

call slasq2( n, z, info )

call dlasq2( n, z, info )

Include Files

  • mkl.fi

Description

The routine ?lasq2 computes all the eigenvalues of the symmetric positive definite tridiagonal matrix associated with the quotient difference array z to high relative accuracy, in the absence of denormalization, underflow and overflow.

To see the relation of z to the tridiagonal matrix, let L be a unit lower bidiagonal matrix with subdiagonals z(2,4,6,,..) and let U be an upper bidiagonal matrix with 1's above and diagonal z(1,3,5,,..). The tridiagonal is LU or, if you prefer, the symmetric tridiagonal to which it is similar.

Input Parameters

n

INTEGER. The number of rows and columns in the matrix. n 0.

z

REAL for slasq2

DOUBLE PRECISION for dlasq2.

Array, DIMENSION (4 * n).

On entry, z holds the quotient difference array.

Output Parameters

z

On exit, entries 1 to n hold the eigenvalues in decreasing order, z(2n+1) holds the trace, and z(2n+2) holds the sum of the eigenvalues. If n > 2, then z(2n+3) holds the iteration count, z(2n+4) holds ndivs/nin2, and z(2n+5) holds the percentage of shifts that failed.

info

INTEGER.

= 0: successful exit;

< 0: if the i-th argument is a scalar and had an illegal value, then info = -i, if the i-th argument is an array and the j-entry had an illegal value, then info = -(i*100+ j);

> 0: the algorithm failed:

= 1, a split was marked by a positive value in e;

= 2, current block of z not diagonalized after 100*n iterations (in inner while loop) - On exit z holds a quotient difference array with the same eigenvalues as the z array on entry;

= 3, termination criterion of outer while loop not met (program created more than n unreduced blocks).

Application Notes

The routine ?lasq2 defines a logical variable, ieee, which is .TRUE. on machines which follow ieee-754 floating-point standard in their handling of infinities and NaNs, and .FALSE. otherwise. This variable is passed to ?lasq3.