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
slarre dlarre
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*Li:code:`T` , and
eigenvalues of each Li*Di*Li:code:`T` .
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*Li:code:`T` .
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*Li:code:`T` ) 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*Li:code:`T` , 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.