# ?larre

Given the tridiagonal matrix T, sets small off-diagonal elements to zero and for each unreduced block Ti, finds base representations and eigenvalues.

## Syntax

call slarre( range, n, vl, vu, il, iu, d, e, e2, rtol1, rtol2, spltol, nsplit, isplit, m, w, werr, wgap, iblock, indexw, gers, pivmin, work, iwork, info )

call dlarre( range, n, vl, vu, il, iu, d, e, e2, rtol1, rtol2, spltol, nsplit, isplit, m, w, werr, wgap, iblock, indexw, gers, pivmin, work, iwork, info )

## Description

To find the desired eigenvalues of a given real symmetric tridiagonal matrix T, the routine sets any “small” off-diagonal elements to zero, and for each unreduced block Ti, it finds

- a suitable shift at one end of the block spectrum

- the base representation, Ti - σi *I = Li*Di*LiT, and

- eigenvalues of each Li*Di*LiT.

The representations and eigenvalues found are then used by ?stemr to compute the eigenvectors of a symmetric tridiagonal matrix. The accuracy varies depending on whether bisection is used to find a few eigenvalues or the dqds algorithm (subroutine ?lasq2) to compute all and discard any unwanted one. As an added benefit, ?larre also outputs the n Gerschgorin intervals for the matrices Li*Di*LiT.

## Input Parameters

range

  CHARACTER.

  = 'A': ("All") all eigenvalues will be found.

  = 'V': ("Value") all eigenvalues in the half-open interval (vl, vu] will be found.

  = 'I': ("Index") the il-th through iu-th eigenvalues of the entire matrix will be found.

n

  INTEGER. The order of the matrix. n > 0.

vl, vu

  REAL for slarre

  DOUBLE PRECISION for dlarre

  If range='V', the lower and upper bounds for the eigenvalues. Eigenvalues less than or equal to vl, or greater than vu, are not returned. vl < vu.

il, iu

  INTEGER.

  If range='I', the indices (in ascending order) of the smallest and largest eigenvalues to be returned. 1 ≤ il ≤ iu ≤ n.

d

  REAL for slarre

  DOUBLE PRECISION for dlarre

  Array, DIMENSION (n).

  The n diagonal elements of the diagonal matrices T.

e

  REAL for slarre

  DOUBLE PRECISION for dlarre

  Array, DIMENSION (n). The first (n-1) entries contain the subdiagonal elements of the tridiagonal matrix T; e(n) need not be set.

e2

  REAL for slarre

  DOUBLE PRECISION for dlarre

  Array, DIMENSION (n). The first (n-1) entries contain the squares of the subdiagonal elements of the tridiagonal matrix T; e2(n) need not be set.

rtol1, rtol2

  REAL for slarre

  DOUBLE PRECISION for dlarre

  Parameters for bisection. An interval [LEFT,RIGHT] has converged if `RIGHT-LEFT.LT.MAX( rtol1*gap, rtol2*max(|LEFT|,|RIGHT|) )`.

spltol

  REAL for slarre

  DOUBLE PRECISION for dlarre

  The threshold for splitting.

work

  REAL for slarre

  DOUBLE PRECISION for dlarre

  Workspace array, DIMENSION (6*n).

iwork

  INTEGER.

  Workspace array, DIMENSION (5*n).

## Output Parameters

vl, vu

  On exit, if range='I' or ='A', contain the bounds on the desired part of the spectrum.

d

  On exit, the n diagonal elements of the diagonal matrices Di .

e

  On exit, the subdiagonal elements of the unit bidiagonal matrices Li . The entries e( isplit( i) ), 1 ≤ i ≤ nsplit, contain the base points sigmai on output.

e2

  On exit, the entries e2( isplit( i) ), 1 ≤ i ≤ nsplit, have been set to zero.

nsplit

  INTEGER. The number of blocks T splits into. `1 ≤ nsplit ≤ n`.

isplit

  INTEGER. Array, DIMENSION (n). The splitting points, at which T breaks up into blocks. The first block consists of rows/columns 1 to isplit(1), the second of rows/columns `isplit(1)+1` through isplit(2), etc., and the nsplit-th consists of rows/columns `isplit(nsplit-1)+1` through `isplit(nsplit)=n`.

m

  INTEGER. The total number of eigenvalues (of all the Li*Di*LiT) found.

w

  REAL for slarre

  DOUBLE PRECISION for dlarre

  Array, DIMENSION (n). The first m elements contain the eigenvalues. The eigenvalues of each of the blocks, Li*Di*LiT, are sorted in ascending order. The routine may use the remaining n-m elements as workspace.

werr

  REAL for slarre

  DOUBLE PRECISION for dlarre

  Array, DIMENSION (n). The error bound on the corresponding eigenvalue in w.

wgap

  REAL for slarre

  DOUBLE PRECISION for dlarre

  Array, DIMENSION (n). The separation from the right neighbor eigenvalue in w. The gap is only with respect to the eigenvalues of the same block as each block has its own representation tree. Exception: at the right end of a block the left gap is stored.

iblock

  INTEGER. Array, DIMENSION (n).

  The indices of the blocks (submatrices) associated with the corresponding eigenvalues in w; `iblock(i)=1` if eigenvalue w(i) belongs to the first block from the top, =2 if w(i) belongs to the second block, etc.

indexw

  INTEGER. Array, DIMENSION (n).

  The indices of the eigenvalues within each block (submatrix); for example, indexw(i)= 10 and iblock(i)=2 imply that the i-th eigenvalue w(i) is the 10-th eigenvalue in the second block.

gers

  REAL for slarre

  DOUBLE PRECISION for dlarre

  Array, DIMENSION (2*n). The n Gerschgorin intervals (the i-th Gerschgorin interval is `(gers(2*i-1), gers(2*i))`.

pivmin

  REAL for slarre

  DOUBLE PRECISION for dlarre

  The minimum pivot in the Sturm sequence for T .

info

  INTEGER.

  If `info = 0`: successful exit

  If `info > 0`: A problem occured in ?larre. If `info = 5`, the Rayleigh Quotient Iteration failed to converge to full accuracy.

  If `info < 0`: One of the called subroutines signaled an internal problem. Inspection of the corresponding parameter info for further information is required.

  - If `info = -1`, there is a problem in ?larrd

  - If `info = -2`, no base representation could be found in maxtry iterations. Increasing maxtry and recompilation might be a remedy.

  - If `info = -3`, there is a problem in ?larrb when computing the refined root representation for ?lasq2.

  - If `info = -4`, there is a problem in ?larrb when preforming bisection on the desired part of the spectrum.

  - If `info = -5`, there is a problem in ?lasq2.

  - If `info = -6`, there is a problem in ?lasq2.

## See Also

../lse/functn_stemr.html#functn_stemr Computes selected eigenvalues and eigenvectors of a real symmetric tridiagonal matrix.
?lasq2 Computes all the eigenvalues of the symmetric positive definite tridiagonal matrix associated with the qd array z to high relative accuracy. Used by ?bdsqr and ?stegr.
?larrb Provides limited bisection to locate eigenvalues for more accuracy.
functn_larrd.html#functn_larrd Computes the eigenvalues of a symmetric tridiagonal matrix to suitable accuracy.
Parent topic: Auxiliary Routines