Visible to Intel only — GUID: GUID-E1754BAA-4E0D-40CA-8C12-FD0F92F2CA74
Visible to Intel only — GUID: GUID-E1754BAA-4E0D-40CA-8C12-FD0F92F2CA74
?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 )
Include Files
- mkl.fi
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.