DLAEBZ(3)
π DLAEBZ(3) β Library Functions Manual π
πΈ NAME πΈ
/home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/dlaebz.f
Okay so that's the source file path, and the main-character routine here is DLAEBZ(3) from the Library Functions Manual. She's the one who computes the number of eigenvalues of a real symmetric tridiagonal matrix that are less than or equal to a given value, and she also does other tasks that the routine sstebz needs. π
β¨ SYNOPSIS β¨
π§ Functions/Subroutines π§
subroutine DLAEBZ (ijob, nitmax, n, mmax, minp, nbmin, abstol, reltol,
pivmin, d, e, e2, nval, ab, c, mout, nab, work, iwork, info)
DLAEBZ computes the number of eigenvalues of a real symmetric tridiagonal matrix which are less than or equal to a given value, and performs other tasks required by the routine sstebz. No cap, that's the whole vibe of this routine. π«Ά
π Function/Subroutine Documentation π
subroutine DLAEBZ (integer ijob, integer nitmax, integer n, integer mmax,
integer minp, integer nbmin, double precision abstol, double precision
reltol, double precision pivmin, double precision, dimension( * ) d,
double precision, dimension( * ) e, double precision, dimension( * ) e2,
integer, dimension( * ) nval, double precision, dimension( mmax, * ) ab,
double precision, dimension( * ) c, integer mout, integer, dimension(
mmax, * ) nab, double precision, dimension( * ) work, integer,
dimension( * ) iwork, integer info)
DLAEBZ computes the number of eigenvalues of a real symmetric tridiagonal matrix which are less than or equal to a given value, and performs other tasks required by the routine sstebz. It's giving helper-routine excellence. π¦
π Purpose π
Okay so DLAEBZ contains the iteration loops which compute and use the function N(w), which is the count of eigenvalues of a symmetric tridiagonal matrix T less than or equal to its argument w. It performs a choice of two types of loops:
IJOB=1, followed byIJOB=2: It takes as input a list of intervals and returns a list of sufficiently small intervals whose union contains the same eigenvalues as the union of the original intervals. The input intervals are(AB(j,1),AB(j,2)],j=1,...,MINP. The output interval(AB(j,1),AB(j,2)]will contain eigenvaluesNAB(j,1)+1,...,NAB(j,2), where1 <= j <= MOUT.IJOB=3: It performs a binary search in each input interval(AB(j,1),AB(j,2)]for a pointw(j)such thatN(w(j))=NVAL(j), and usesC(j)as the starting point of the search. If such aw(j)is found, then on outputAB(j,1)=AB(j,2)=w. If no suchw(j)is found, then on output(AB(j,1),AB(j,2)]will be a small interval containing the point whereN(w)jumps throughNVAL(j), unless that point lies outside the initial interval.
Note that the intervals are in all cases half-open intervals, i.e., of the form (a,b], which includes b but not a. π
To avoid underflow, the matrix should be scaled so that its largest element is no greater than overflow**(1/2) * underflow**(1/4) in absolute value. To assure the most accurate computation of small eigenvalues, the matrix should be scaled to be not much smaller than that, either. πΈ
See W. Kahan, Report CS41, Computer Science Dept., Stanford University, July 21, 1966.
Note: the arguments are, in general, not checked for unreasonable values. So bestie, please don't feed her chaos and expect a warning. π
π Parameters π
IJOBβINTEGER. Specifies what is to be done:= 1: ComputeNABfor the initial intervals.= 2: Perform bisection iteration to find eigenvalues ofT.= 3: Perform bisection iteration to invertN(w), i.e., to find a point which has a specified number of eigenvalues ofTto its left.- Other values will cause
DLAEBZto return withINFO=-1. π
NITMAXβINTEGER. The maximum number of bisection steps to be performed, i.e., an interval of widthWwill not be made smaller than2^(-NITMAX) * W. If not all intervals have converged afterNITMAXiterations, thenINFOis set to the number of non-converged intervals. β³NβINTEGER. The dimensionnof the tridiagonal matrixT. It must be at least1. πMMAXβINTEGER. The maximum number of intervals. If more thanMMAXintervals are generated, thenDLAEBZwill quit withINFO=MMAX+1. πͺMINPβINTEGER. The initial number of intervals. It may not be greater thanMMAX. πΈNBMINβINTEGER. The smallest number of intervals that should be processed using a vector loop. If zero, then only the scalar loop will be used. πABSTOLβDOUBLE PRECISION. The minimum (absolute) width of an interval. When an interval is narrower thanABSTOL, or thanRELTOLtimes the larger (in magnitude) endpoint, then it is considered to be sufficiently small, i.e., converged. This must be at least zero. π―RELTOLβDOUBLE PRECISION. The minimum relative width of an interval. When an interval is narrower thanABSTOL, or thanRELTOLtimes the larger (in magnitude) endpoint, then it is considered to be sufficiently small, i.e., converged. Note: this should always be at leastradix*machine epsilon. β οΈPIVMINβDOUBLE PRECISION. The minimum absolute value ofain the Sturm sequence loop. This must be at leastmax |e(j)**2|*safe_minand at leastsafe_min, wheresafe_minis at least the smallest number that can divide one without overflow. πDβDOUBLE PRECISION array, dimension (N). The diagonal elements of the tridiagonal matrixT. π¦EβDOUBLE PRECISION array, dimension (N). The offdiagonal elements of the tridiagonal matrixTin positions1throughN-1.E(N)is arbitrary. πE2βDOUBLE PRECISION array, dimension (N). The squares of the offdiagonal elements of the tridiagonal matrixT.E2(N)is ignored. β¨NVALβINTEGER array, dimension (MINP). IfIJOB=1or2, not referenced. IfIJOB=3, the desired values ofN(w). The elements ofNVALwill be reordered to correspond with the intervals inAB. Thus,NVAL(j)on output will not, in general, be the same asNVAL(j)on input, but it will correspond with the interval(AB(j,1),AB(j,2)]on output. πABβDOUBLE PRECISION array, dimension (MMAX,2). The endpoints of the intervals.AB(j,1)isa(j), the left endpoint of the j-th interval, andAB(j,2)isb(j), the right endpoint of the j-th interval. The input intervals will, in general, be modified, split, and reordered by the calculation. π§©CβDOUBLE PRECISION array, dimension (MMAX). IfIJOB=1, ignored. IfIJOB=2, workspace. IfIJOB=3, then on inputC(j)should be initialized to the first search point in the binary search. πMOUTβINTEGER. IfIJOB=1, the number of eigenvalues in the intervals. IfIJOB=2or3, the number of intervals output. IfIJOB=3,MOUTwill equalMINP. π¬NABβINTEGER array, dimension (MMAX,2). This one has lore:- If
IJOB=1, then on outputNAB(i,j)will be set toN(AB(i,j)). - If
IJOB=2, then on input,NAB(i,j)should be set. It must satisfy the condition:N(AB(i,1)) <= NAB(i,1) <= NAB(i,2) <= N(AB(i,2)), which means that in intervalionly eigenvaluesNAB(i,1)+1,...,NAB(i,2)will be considered. Usually,NAB(i,j)=N(AB(i,j)), from a previous call toDLAEBZwithIJOB=1. On output,NAB(i,j)will containmax(na(k),min(nb(k),N(AB(i,j)))), wherekis the index of the input interval that the output interval(AB(j,1),AB(j,2)]came from, andna(k)andnb(k)are the input values ofNAB(k,1)andNAB(k,2). - If
IJOB=3, then on output,NAB(i,j)containsN(AB(i,j)), unlessN(w) > NVAL(i)for all search pointsw, in which caseNAB(i,1)will not be modified, i.e., the output value will be the same as the input value (modulo reorderings -- seeNVALandAB), or unlessN(w) < NVAL(i)for all search pointsw, in which caseNAB(i,2)will not be modified. Normally,NABshould be set to some distinctive value(s) beforeDLAEBZis called. π«Ά
- If
WORKβDOUBLE PRECISION array, dimension (MMAX). Workspace. π§°IWORKβINTEGER array, dimension (MMAX). Workspace. π§°INFOβINTEGER.= 0: All intervals converged.= 1--MMAX: The lastINFOintervals did not converge.= MMAX+1: More thanMMAXintervals were generated. π¨
π Author π
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
π¦ Further Details π¦
No extra details are listed under this heading. π
okay so real talk: this routine is only meant to be called by other LAPACK routines, so the interface is less user-friendly. It's here for two purposes, and they're both very much "trust the process" energy:
- Finding eigenvalues. In this case
DLAEBZshould have one or more initial intervals set up inAB, andDLAEBZshould be called withIJOB=1. This sets upNAB, and also counts the eigenvalues. Intervals with no eigenvalues would usually be thrown out at this point. Also, if not all the eigenvalues in an intervaliare desired,NAB(i,1)can be increased orNAB(i,2)decreased. For example, setNAB(i,1)=NAB(i,2)-1to get the largest eigenvalue.DLAEBZis then called withIJOB=2andMMAXno smaller than the value ofMOUTreturned by the call withIJOB=1. After this (IJOB=2) call, eigenvaluesNAB(i,1)+1throughNAB(i,2)are approximatelyAB(i,1)(orAB(i,2)) to the tolerance specified byABSTOLandRELTOL. - Finding an interval
(a',b']containing eigenvaluesw(f),...,w(l). In this case, start with a Gershgorin interval(a,b). Set upABto contain 2 search intervals, both initially(a,b). OneNVALelement should containf-1and the other should containl, whileCshould containaandb, resp.NAB(i,1)should be-1andNAB(i,2)should beN+1, to flag an error if the desired interval does not lie in(a,b).DLAEBZis then called withIJOB=3. On exit, ifw(f-1) < w(f), then one of the intervals --j-- will haveAB(j,1)=AB(j,2)andNAB(j,1)=NAB(j,2)=f-1, while if, to the specified tolerance,w(f-k)=...=w(f+r),k > 0andr >= 0, then the interval will haveN(AB(j,1))=NAB(j,1)=f-kandN(AB(j,2))=NAB(j,2)=f+r. The casesw(l) < w(l+1)andw(l-r)=...=w(l+k)are handled similarly.
Definition at line 316 of file dlaebz.f. π
Author π«Ά
Generated automatically by Doxygen for LAPACK from the source code.
xoxo, bestie π β this footer situation is LAPACK Version 3.12.0, source /home/abui...RC/dlaebz.f(3), and that's the source/version/date line handled, periodt. π
π¦ where this page comes from
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms