Developer Reference for Intel® oneAPI Math Kernel Library for Fortran
?larre
Given the tridiagonal matrix T, sets small off-diagonal elements to zero and for each unreduced block T i , 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 :code:`iblock(i)`=2 imply that the :code:`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.