Developer Reference for Intel® oneAPI Math Kernel Library for Fortran

ID 766686
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

?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.