1SSTEBZ(1)                LAPACK routine (version 3.1)                SSTEBZ(1)
2
3
4

NAME

6       SSTEBZ - the eigenvalues of a symmetric tridiagonal matrix T
7

SYNOPSIS

9       SUBROUTINE SSTEBZ( RANGE,  ORDER,  N,  VL, VU, IL, IU, ABSTOL, D, E, M,
10                          NSPLIT, W, IBLOCK, ISPLIT, WORK, IWORK, INFO )
11
12           CHARACTER      ORDER, RANGE
13
14           INTEGER        IL, INFO, IU, M, N, NSPLIT
15
16           REAL           ABSTOL, VL, VU
17
18           INTEGER        IBLOCK( * ), ISPLIT( * ), IWORK( * )
19
20           REAL           D( * ), E( * ), W( * ), WORK( * )
21

PURPOSE

23       SSTEBZ computes the eigenvalues of a symmetric  tridiagonal  matrix  T.
24       The  user may ask for all eigenvalues, all eigenvalues in the half-open
25       interval (VL, VU], or the IL-th through IU-th eigenvalues.
26
27       To avoid overflow, the matrix must be scaled so that its
28       largest element is no greater than overflow**(1/2) *
29       underflow**(1/4) in absolute value, and for greatest
30       accuracy, it should not be much smaller than that.
31
32       See W. Kahan "Accurate Eigenvalues of a Symmetric Tridiagonal  Matrix",
33       Report CS41, Computer Science Dept., Stanford
34       University, July 21, 1966.
35
36

ARGUMENTS

38       RANGE   (input) CHARACTER*1
39               = 'A': ("All")   all eigenvalues will be found.
40               = 'V': ("Value") all eigenvalues in the half-open interval (VL,
41               VU] will be found.  = 'I': ("Index") the  IL-th  through  IU-th
42               eigenvalues (of the entire matrix) will be found.
43
44       ORDER   (input) CHARACTER*1
45               =  'B':  ("By Block") the eigenvalues will be grouped by split-
46               off block (see IBLOCK, ISPLIT) and  ordered  from  smallest  to
47               largest  within the block.  = 'E': ("Entire matrix") the eigen‐
48               values for the entire matrix will be ordered from  smallest  to
49               largest.
50
51       N       (input) INTEGER
52               The order of the tridiagonal matrix T.  N >= 0.
53
54       VL      (input) REAL
55               VU       (input)  REAL If RANGE='V', the lower and upper bounds
56               of the interval to be searched  for  eigenvalues.   Eigenvalues
57               less  than  or  equal  to  VL,  or greater than VU, will not be
58               returned.  VL < VU.  Not referenced if RANGE = 'A' or 'I'.
59
60       IL      (input) INTEGER
61               IU      (input) INTEGER If RANGE='I', the indices (in ascending
62               order)  of the smallest and largest eigenvalues to be returned.
63               1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0.   Not
64               referenced if RANGE = 'A' or 'V'.
65
66       ABSTOL  (input) REAL
67               The  absolute tolerance for the eigenvalues.  An eigenvalue (or
68               cluster) is considered to be located if it has been  determined
69               to lie in an interval whose width is ABSTOL or less.  If ABSTOL
70               is less than or equal to zero, then ULP*|T| will be used, where
71               |T| means the 1-norm of T.
72
73               Eigenvalues will be computed most accurately when ABSTOL is set
74               to twice the underflow threshold 2*SLAMCH('S'), not zero.
75
76       D       (input) REAL array, dimension (N)
77               The n diagonal elements of the tridiagonal matrix T.
78
79       E       (input) REAL array, dimension (N-1)
80               The (n-1) off-diagonal elements of the tridiagonal matrix T.
81
82       M       (output) INTEGER
83               The actual number of eigenvalues found. 0 <= M <= N.  (See also
84               the description of INFO=2,3.)
85
86       NSPLIT  (output) INTEGER
87               The  number of diagonal blocks in the matrix T.  1 <= NSPLIT <=
88               N.
89
90       W       (output) REAL array, dimension (N)
91               On exit, the first M elements of W will contain  the  eigenval‐
92               ues.  (SSTEBZ may use the remaining N-M elements as workspace.)
93
94       IBLOCK  (output) INTEGER array, dimension (N)
95               At  each row/column j where E(j) is zero or small, the matrix T
96               is considered to split into a block diagonal matrix.  On  exit,
97               if  INFO = 0, IBLOCK(i) specifies to which block (from 1 to the
98               number of blocks) the eigenvalue W(i) belongs.  (SSTEBZ may use
99               the remaining N-M elements as workspace.)
100
101       ISPLIT  (output) INTEGER array, dimension (N)
102               The  splitting  points,  at which T breaks up into submatrices.
103               The first submatrix consists of rows/columns  1  to  ISPLIT(1),
104               the second of rows/columns ISPLIT(1)+1 through ISPLIT(2), etc.,
105               and the NSPLIT-th consists of  rows/columns  ISPLIT(NSPLIT-1)+1
106               through ISPLIT(NSPLIT)=N.  (Only the first NSPLIT elements will
107               actually be used, but since the user cannot know a priori  what
108               value NSPLIT will have, N words must be reserved for ISPLIT.)
109
110       WORK    (workspace) REAL array, dimension (4*N)
111
112       IWORK   (workspace) INTEGER array, dimension (3*N)
113
114       INFO    (output) INTEGER
115               = 0:  successful exit
116               < 0:  if INFO = -i, the i-th argument had an illegal value
117               > 0:  some or all of the eigenvalues failed to converge or
118               were not computed:
119               =1  or  3:  Bisection  failed to converge for some eigenvalues;
120               these eigenvalues are flagged by a negative block number.   The
121               effect  is  that  the eigenvalues may not be as accurate as the
122               absolute and relative tolerances.  This is generally caused  by
123               unexpectedly  inaccurate  arithmetic.  =2 or 3: RANGE='I' only:
124               Not all of the eigenvalues
125               IL:IU were found.
126               Effect: M < IU+1-IL
127               Cause:  non-monotonic arithmetic, causing the Sturm sequence to
128               be  non-monotonic.   Cure:    recalculate, using RANGE='A', and
129               pick
130               out eigenvalues IL:IU.  In some cases, increasing the PARAMETER
131               "FUDGE"  may make things work.  = 4:    RANGE='I', and the Ger‐
132               shgorin interval initially used was too small.  No  eigenvalues
133               were  computed.  Probable cause: your machine has sloppy float‐
134               ing-point arithmetic.  Cure: Increase  the  PARAMETER  "FUDGE",
135               recompile, and try again.
136

PARAMETERS

138       RELFAC  REAL, default = 2.0e0
139               The  relative  tolerance.  An interval (a,b] lies within "rela‐
140               tive tolerance" if  b-a < RELFAC*ulp*max(|a|,|b|), where  "ulp"
141               is  the  machine  precision (distance from 1 to the next larger
142               floating point number.)
143
144       FUDGE   REAL, default = 2
145               A "fudge factor" to widen the Gershgorin intervals.  Ideally, a
146               value of 1 should work, but on machines with sloppy arithmetic,
147               this needs to be larger.  The  default  for  publicly  released
148               versions  should  be  large  enough to handle the worst machine
149               around.  Note that this has no effect on accuracy of the  solu‐
150               tion.
151
152
153
154 LAPACK routine (version 3.1)    November 2006                       SSTEBZ(1)
Impressum