Man page - stemr(3)
Packages contains this manual
- hptrd(3)
- potri(3)
- xerbla_array(3)
- ggsvd_driver_grp(3)
- hfrk(3)
- getsqr_comp_grp(3)
- laed6(3)
- gtrfs(3)
- lasdq(3)
- gglse(3)
- la_xisnan_la_isnan(3)
- unmr2(3)
- hetrs_aa(3)
- tpttr(3)
- gerz_comp_grp(3)
- potrf(3)
- hegv_driver(3)
- laqps(3)
- ggqr_comp_grp(3)
- ilalc(3)
- ung2r(3)
- heevd(3)
- pstf2(3)
- lacn2(3)
- ptrfs(3)
- ungrq(3)
- gelqf(3)
- ppsv_comp(3)
- blas2_full(3)
- gemlqt(3)
- unml2(3)
- tplqt(3)
- tpcon(3)
- getf2(3)
- ggbak(3)
- bdsvd_driver(3)
- lamch(3)
- gelq(3)
- gebal(3)
- laqr1(3)
- ptsvx(3)
- lahr2(3)
- larscl2(3)
- geqrt(3)
- larfb(3)
- gtsv_comp(3)
- gesvd_aux(3)
- hbevx_2stage(3)
- hbgvx(3)
- tprfs(3)
- params_grp(3)
- lahef(3)
- laqr_group(3)
- unmqr(3)
- tgsy2(3)
- tfsv_comp(3)
- ggls_driver_grp(3)
- geev(3)
- latrd(3)
- unbdb4(3)
- bbcsd(3)
- lange(3)
- gelq_comp3(3)
- gttrs(3)
- lasy2(3)
- hetf2_rook(3)
- gtsv(3)
- lalsd(3)
- lanhb(3)
- laqhb(3)
- hgeqz(3)
- gesvj(3)
- gsvj0(3)
- ungtsqr_row(3)
- gelq_comp1(3)
- gemmtr(3)
- pbequ(3)
- heev_driver(3)
- unhr_col(3)
- syconvf_rook(3)
- getc2(3)
- syconv(3)
- norm_grp(3)
- larrc(3)
- laqr4(3)
- posv_comp(3)
- geev_driver_grp(3)
- heev_comp(3)
- pfsv(3)
- trevc3(3)
- gesv_driver_grp(3)
- reflector_aux_grp(3)
- langt(3)
- lacrt(3)
- latdf(3)
- hetrs_aa_2stage(3)
- lamc1(3)
- hpev_driver(3)
- hegvd(3)
- pptri(3)
- geqrt3(3)
- gelqt3(3)
- lasd5(3)
- laeda(3)
- geqr(3)
- lamtsqr(3)
- heev(3)
- hpev_comp(3)
- larfg(3)
- blas2_grp(3)
- hesv_rook(3)
- laexc(3)
- hetrd(3)
- geesx(3)
- ppsvx(3)
- blas_top(3)
- gtts2(3)
- la_herpvgrw(3)
- hpevx(3)
- ggevx(3)
- lahqr(3)
- gelq_comp_grp(3)
- hesv_comp_v3(3)
- tplqt2(3)
- hpev(3)
- hbtrd(3)
- getrs(3)
- hecon_3(3)
- lasrt(3)
- lanhe(3)
- gesv_comp(3)
- gbequ(3)
- hetrf_rk(3)
- laqr3(3)
- heev_comp_grp(3)
- ungtsqr(3)
- ppcon(3)
- ggrq_comp_grp(3)
- larmm(3)
- ieeeck(3)
- geqrf(3)
- solve_aux_grp(3)
- herfs(3)
- posvx(3)
- posvxx(3)
- gges3(3)
- hbgvd(3)
- lantb(3)
- lasd_comp_grp(3)
- hpgvx(3)
- lapy2(3)
- lauu2(3)
- copy(3)
- getsqrhrt(3)
- stev_comp_grp(3)
- laev2(3)
- larfb_gett(3)
- trti2(3)
- laqz4(3)
- hegv_driver_grp(3)
- la_porfsx_extended(3)
- laruv(3)
- ggsvd_comp_grp(3)
- dot(3)
- gehd2(3)
- lanhf(3)
- hetri_rook(3)
- pfsv_comp(3)
- gbtrf(3)
- hpgst(3)
- getri(3)
- trevc(3)
- unmrz(3)
- hsein(3)
- lsamen(3)
- lasd6(3)
- trtri(3)
- ggglm(3)
- las2(3)
- latrs(3)
- lapll(3)
- gemlq(3)
- geqpf_comp_grp(3)
- stemr(3)
- rotm(3)
- disna(3)
- ggrqf(3)
- pptrf(3)
- lasd0(3)
- lals0(3)
- laqz2(3)
- hbev_driver2(3)
- geswlq_comp_grp(3)
- laqr0(3)
- trttp(3)
- stedc(3)
- lasq4(3)
- geev_comp_grp(3)
- ungbr(3)
- lanv2(3)
- hpsv(3)
- pprfs(3)
- gehrd(3)
- ppsv(3)
- lagtm(3)
- hpgv(3)
- trsv_comp(3)
- larfx(3)
- gesv_driver(3)
- gerfsx(3)
- la_geamv(3)
- laed9(3)
- tpqrt2(3)
- uncsd(3)
- gecs_comp_grp(3)
- bdsqr(3)
- hegv_comp_grp(3)
- labad(3)
- geqp3(3)
- gesvdq(3)
- tfttp(3)
- laln2(3)
- uncsd2by1(3)
- blas2_like_grp(3)
- latbs(3)
- hbgst(3)
- larrv(3)
- ilaenv2stage(3)
- bdsvdx(3)
- hegs2(3)
- lasq_comp_grp(3)
- hpr2(3)
- laqhe(3)
- larra(3)
- gemqrt(3)
- hbmv(3)
- hpsv_driver(3)
- lacp2(3)
- lapmt(3)
- gecon(3)
- unbdb5(3)
- la_gerpvgrw(3)
- tgex2(3)
- laqhp(3)
- tftri(3)
- getrf2(3)
- porfs(3)
- lartg(3)
- lagts(3)
- ggev_comp_grp(3)
- lasd3(3)
- geqr_comp2(3)
- laqz_group(3)
- pftri(3)
- hetri2x(3)
- lahef_aa(3)
- svd_driver_grp(3)
- gbsv_driver(3)
- hesv_comp_aasen2(3)
- laqtr(3)
- lag2(3)
- la_porcond(3)
- hbev(3)
- pbtrf(3)
- lascl(3)
- larr_comp_grp(3)
- hecon(3)
- pttrs(3)
- lasd8(3)
- lsame(3)
- unm2l(3)
- potrs(3)
- tptrs(3)
- lartv(3)
- trtrs(3)
- gsvj1(3)
- sum1(3)
- larrj(3)
- gbmv(3)
- posv(3)
- gghd3(3)
- geev_top(3)
- geqr_comp_grp(3)
- laset(3)
- hesvxx(3)
- posv_comp_grp(3)
- lahef_rk(3)
- lasd1(3)
- tprfb(3)
- potf2(3)
- laein(3)
- lamc4(3)
- stevd(3)
- gtsv_driver(3)
- gesvd_comp_grp(3)
- la_constants(3)
- gesvx(3)
- hseqr(3)
- launhr_col_getrfnp2(3)
- trcon(3)
- larre(3)
- gelsy(3)
- ptsv(3)
- lacon(3)
- laed_comp_grp(3)
- hpsvx(3)
- gemm(3)
- poequ(3)
- laesy(3)
- lagtf(3)
- trrfs(3)
- ggev3(3)
- pbstf(3)
- poequb(3)
- heevr(3)
- lanhp(3)
- unbdb3(3)
- tgsyl(3)
- lamc5(3)
- geqr2p(3)
- ungqr(3)
- laqz3(3)
- imax1(3)
- gels_top(3)
- hesv(3)
- gelqt(3)
- pfsv_driver(3)
- stegr(3)
- gerqf(3)
- laisnan(3)
- ilatrans(3)
- gbsv_comp(3)
- pbrfs(3)
- lascl2(3)
- larz(3)
- la_hercond(3)
- tgexc(3)
- ggesx(3)
- unbdb6(3)
- ungl2(3)
- laed_comp2(3)
- rscl(3)
- hegv(3)
- gelst(3)
- gbtrs(3)
- pftrf(3)
- langb(3)
- lantr(3)
- laqgb(3)
- ggsvp3(3)
- bdsdc(3)
- ladiv(3)
- laqge(3)
- iparmq(3)
- ggbal(3)
- hb2st_kernels(3)
- lartgs(3)
- lartgp(3)
- rot(3)
- ppequ(3)
- laed3(3)
- her(3)
- hptri(3)
- stevx(3)
- upgtr(3)
- lar2v(3)
- hbev_2stage(3)
- gejsv(3)
- ppsv_driver(3)
- unm22(3)
- gesvxx(3)
- laqz0(3)
- unmtr(3)
- laed5(3)
- tptri(3)
- laed0(3)
- heev_driver2(3)
- hpcon(3)
- lasd4(3)
- hetrf_aa(3)
- geqr_comp3(3)
- rot_aux_grp(3)
- aux_grp(3)
- laebz(3)
- trsyl3(3)
- gges(3)
- gesdd(3)
- trexc(3)
- ung2l(3)
- gesv(3)
- laed4(3)
- md__r_e_a_d_m_e(3)
- blas3_like_grp(3)
- laed1(3)
- larcm(3)
- hbevx(3)
- hesv_driver_grp(3)
- hetrs(3)
- hbevd_2stage(3)
- blas1_grp(3)
- laic1(3)
- geql_comp_grp(3)
- heev_2stage(3)
- hpmv(3)
- pbtf2(3)
- hetrf_aa_2stage(3)
- hbgv(3)
- pptrs(3)
- lapmr(3)
- tpqr_comp_grp(3)
- larfy(3)
- gedmd(3)
- lasr(3)
- hetrd_2stage(3)
- gerfs(3)
- ungtr(3)
- porfsx(3)
- tpmv(3)
- lasd_comp2(3)
- unmbr(3)
- tbtrs(3)
- hetd2(3)
- trsv_comp_grp(3)
- lapy3(3)
- ptts2(3)
- unmhr(3)
- hbev_driver(3)
- lalsa(3)
- tbsv_comp(3)
- hesv_comp_v1(3)
- geql2(3)
- sterf(3)
- larrd(3)
- larft(3)
- lagv2(3)
- gttrf(3)
- tpqrt(3)
- la_lin_berr(3)
- rotg(3)
- solve_top(3)
- lacgv(3)
- larrf(3)
- tbmv(3)
- trsyl(3)
- geequ(3)
- upmtr(3)
- hpgv_driver(3)
- tbsv(3)
- hesvx(3)
- latrz(3)
- tfttr(3)
- gesv_comp_grp(3)
- xerbla_grp(3)
- tpsv(3)
- blas3_grp(3)
- gesvd_driver(3)
- geqr_comp1(3)
- ggev_driver_grp(3)
- la_gbamv(3)
- tpmlqt(3)
- trttf(3)
- larzb(3)
- unmr3(3)
- hecon_rook(3)
- stebz(3)
- lantp(3)
- laqz1(3)
- hesv_rk(3)
- tbcon(3)
- xerbla(3)
- posv_mixed(3)
- latps(3)
- hesv_aa_driver(3)
- gemqr(3)
- larrr(3)
- gebrd(3)
- tgsna(3)
- la_gercond(3)
- gbsv(3)
- hesv_comp_grp(3)
- gesv_mixed(3)
- gghrd(3)
- gbrfs(3)
- tpmqrt(3)
- lasq3(3)
- tpsv_comp(3)
- largv(3)
- gelsd(3)
- pftrs(3)
- asum(3)
- launhr_col_getrfnp(3)
- hptrf(3)
- lacpy(3)
- gesc2(3)
- lasda(3)
- second(3)
- hprfs(3)
- hpsv_comp(3)
- lamrg(3)
- pbsv_comp(3)
- hegv_2stage(3)
- gerq2(3)
- lasdt(3)
- abs1(3)
- hbevd(3)
- hbev_comp(3)
- trsv(3)
- la_porpvgrw(3)
- la_gbrpvgrw(3)
- hbgv_driver(3)
- tgsja(3)
- gebd2(3)
- geqr2(3)
- unm2r(3)
- unmql(3)
- la_gbrfsx_extended(3)
- gelq_comp2(3)
- iparam2stage(3)
- ger(3)
- larf(3)
- ilaprec(3)
- labrd(3)
- unbdb1(3)
- unmlq(3)
- geequb(3)
- la_herfsx_extended(3)
- unbdb2(3)
- lapack_top(3)
- ptsv_driver(3)
- hetrs2(3)
- geqr_comp4(3)
- pbsv(3)
- posv_driver(3)
- steqr(3)
- gels(3)
- lar1v(3)
- hemv(3)
- la_transtype(3)
- hesv_aa(3)
- lacrm(3)
- stevr(3)
- hetf2_rk(3)
- blas2_banded(3)
- stein(3)
- unmrq(3)
- larrk(3)
- hetri2(3)
- hesv_aa_2stage(3)
- pttrf(3)
- gelss(3)
- pbsv_driver(3)
- lasq5(3)
- heevx_2stage(3)
- hetri(3)
- lasd2(3)
- laed2(3)
- pbcon(3)
- ptcon(3)
- laed7(3)
- gels_aux_grp(3)
- hpgvd(3)
- hetf2(3)
- tzrzf(3)
- hpr(3)
- unitary_top(3)
- latsqr(3)
- ungql(3)
- her2(3)
- hetri_3x(3)
- hetrd_hb2st(3)
- tgsen(3)
- ggsvd3(3)
- lasq6(3)
- set_grp(3)
- larfgp(3)
- gels_driver_grp(3)
- pbtrs(3)
- lamswlq(3)
- lanht(3)
- gbsvxx(3)
- tgevc(3)
- ilaenv(3)
- swap(3)
- lae2(3)
- iladiag(3)
- lasq2(3)
- la_heamv(3)
- blas_like_top(3)
- la_gerfsx_extended(3)
- hegst(3)
- tfsm(3)
- gesvd(3)
- ungr2(3)
- ggev(3)
- aux_top(3)
- blas2_packed(3)
- geqlf(3)
- hetrs_rook(3)
- gelq2(3)
- geqrfp(3)
- gbequb(3)
- stev(3)
- lauum(3)
- potrf2(3)
- lamc3(3)
- gbrfsx(3)
- gerq_comp_grp(3)
- pocon(3)
- tbrfs(3)
- heswapr(3)
- lamc2(3)
- hpevd(3)
- hesv_comp_aasen(3)
- scalar_grp(3)
- gemv(3)
- lasv2(3)
- lanhs(3)
- svd_top(3)
- gbsvx(3)
- gesvdx(3)
- tplq_comp_grp(3)
- hesv_driver(3)
- hesv_comp_v2(3)
- trsen(3)
- syconvf(3)
- lasd7(3)
- gbcon(3)
- unbdb(3)
- heev_driver_grp(3)
- ggqrf(3)
- heevx(3)
- gtsvx(3)
- lahef_rook(3)
- hetrf_rook(3)
- hetrf(3)
- trsna(3)
- gebak(3)
- larnv(3)
- ptsv_comp(3)
- laswlq(3)
- lags2(3)
- laed8(3)
- laswp(3)
- hptrs(3)
- unglq(3)
- la_wwaddw(3)
- getrf(3)
- gees(3)
- gbtf2(3)
- hegvx(3)
- latrs3(3)
- roundup_lwork(3)
- unghr(3)
- iamax(3)
- larzt(3)
- pteqr(3)
- ilaver(3)
- trmv(3)
- la_gbrcond(3)
- blas0_like_grp(3)
- nrm2(3)
- heev_top(3)
- gtcon(3)
- heevr_2stage(3)
- pstrf(3)
- rot_comp(3)
- laqr5(3)
- heevd_2stage(3)
- getsls(3)
- hetrd_he2hb(3)
- heequb(3)
- laqp2(3)
- axpy(3)
- blast_aux(3)
- rotmg(3)
- pbsvx(3)
- ilauplo(3)
- herfsx(3)
- laqr2(3)
- blas1_like_grp(3)
- lassq(3)
- larrb(3)
- stev_driver(3)
- geevx(3)
- tpttf(3)
- scal(3)
- laneg(3)
- posv_driver_grp(3)
- lasq1(3)
- hetrs_3(3)
- geqrt2(3)
- gbbrd(3)
- ilalr(3)
- hetri_3(3)
apt-get install liblapack-doc
Manual
stemr
NAMESYNOPSIS
Functions
Detailed Description
Function Documentation
subroutine cstemr (character jobz, character range, integer n, real,dimension( * ) d, real, dimension( * ) e, real vl, real vu, integer il,integer iu, integer m, real, dimension( * ) w, complex, dimension( ldz,* ) z, integer ldz, integer nzc, integer, dimension( * ) isuppz,logical tryrac, real, dimension( * ) work, integer lwork, integer,dimension( * ) iwork, integer liwork, integer info)
subroutine dstemr (character jobz, character range, integer n, doubleprecision, dimension( * ) d, double precision, dimension( * ) e, doubleprecision vl, double precision vu, integer il, integer iu, integer m,double precision, dimension( * ) w, double precision, dimension( ldz, *) z, integer ldz, integer nzc, integer, dimension( * ) isuppz, logicaltryrac, double precision, dimension( * ) work, integer lwork, integer,dimension( * ) iwork, integer liwork, integer info)
subroutine sstemr (character jobz, character range, integer n, real,dimension( * ) d, real, dimension( * ) e, real vl, real vu, integer il,integer iu, integer m, real, dimension( * ) w, real, dimension( ldz, *) z, integer ldz, integer nzc, integer, dimension( * ) isuppz, logicaltryrac, real, dimension( * ) work, integer lwork, integer, dimension( *) iwork, integer liwork, integer info)
subroutine zstemr (character jobz, character range, integer n, doubleprecision, dimension( * ) d, double precision, dimension( * ) e, doubleprecision vl, double precision vu, integer il, integer iu, integer m,double precision, dimension( * ) w, complex*16, dimension( ldz, * ) z,integer ldz, integer nzc, integer, dimension( * ) isuppz, logicaltryrac, double precision, dimension( * ) work, integer lwork, integer,dimension( * ) iwork, integer liwork, integer info)
Author
NAME
stemr - stemr: eig, relatively robust representation (RRR)
SYNOPSIS
Functions
subroutine
cstemr
(jobz, range, n, d, e, vl, vu, il, iu, m, w,
z, ldz, nzc, isuppz, tryrac, work, lwork, iwork, liwork,
info)
CSTEMR
subroutine
dstemr
(jobz, range, n, d, e, vl, vu, il,
iu, m, w, z, ldz, nzc, isuppz, tryrac, work, lwork, iwork,
liwork, info)
DSTEMR
subroutine
sstemr
(jobz, range, n, d, e, vl, vu, il,
iu, m, w, z, ldz, nzc, isuppz, tryrac, work, lwork, iwork,
liwork, info)
SSTEMR
subroutine
zstemr
(jobz, range, n, d, e, vl, vu, il,
iu, m, w, z, ldz, nzc, isuppz, tryrac, work, lwork, iwork,
liwork, info)
ZSTEMR
Detailed Description
Function Documentation
subroutine cstemr (character jobz, character range, integer n, real,dimension( * ) d, real, dimension( * ) e, real vl, real vu, integer il,integer iu, integer m, real, dimension( * ) w, complex, dimension( ldz,* ) z, integer ldz, integer nzc, integer, dimension( * ) isuppz,logical tryrac, real, dimension( * ) work, integer lwork, integer,dimension( * ) iwork, integer liwork, integer info)
CSTEMR
Purpose:
CSTEMR computes
selected eigenvalues and, optionally, eigenvectors
of a real symmetric tridiagonal matrix T. Any such unreduced
matrix has
a well defined set of pairwise different real eigenvalues,
the corresponding
real eigenvectors are pairwise orthogonal.
The spectrum
may be computed either completely or partially by specifying
either an interval (VL,VU] or a range of indices IL:IU for
the desired
eigenvalues.
Depending on
the number of desired eigenvalues, these are computed either
by bisection or the dqds algorithm. Numerically orthogonal
eigenvectors are
computed by the use of various suitable L D LΛT
factorizations near clusters
of close eigenvalues (referred to as RRRs, Relatively Robust
Representations). An informal sketch of the algorithm
follows.
For each
unreduced block (submatrix) of T,
(a) Compute T - sigma I = L D LΛT, so that L and D
define all the wanted eigenvalues to high relative accuracy.
This means that small relative changes in the entries of D
and L
cause only small relative changes in the eigenvalues and
eigenvectors. The standard (unfactored) representation of
the
tridiagonal matrix T does not have this property in general.
(b) Compute the eigenvalues to suitable accuracy.
If the eigenvectors are desired, the algorithm attains full
accuracy of the computed eigenvalues only right before
the corresponding vectors have to be computed, see steps c)
and d).
(c) For each cluster of close eigenvalues, select a new
shift close to the cluster, find a new factorization, and
refine
the shifted eigenvalues to suitable accuracy.
(d) For each eigenvalue with a large enough relative
separation compute
the corresponding eigenvector by forming a rank revealing
twisted
factorization. Go back to (c) for any clusters that
remain.
For more
details, see:
- Inderjit S. Dhillon and Beresford N. Parlett:
βMultiple representations
to compute orthogonal eigenvectors of symmetric tridiagonal
matrices,β
Linear Algebra and its Applications, 387(1), pp. 1-28,
August 2004.
- Inderjit Dhillon and Beresford Parlett: βOrthogonal
Eigenvectors and
Relative Gaps,β SIAM Journal on Matrix Analysis and
Applications, Vol. 25,
2004. Also LAPACK Working Note 154.
- Inderjit Dhillon: βA new O(nΛ2) algorithm for
the symmetric
tridiagonal eigenvalue/eigenvector problemβ,
Computer Science Division Technical Report No.
UCB/CSD-97-971,
UC Berkeley, May 1997.
Further Details
1.CSTEMR works only on machines which follow IEEE-754
floating-point standard in their handling of infinities and
NaNs.
This permits the use of efficient inner loops avoiding a
check for
zero divisors.
2. LAPACK
routines can be used to reduce a complex Hermitean matrix to
real symmetric tridiagonal form.
(Any complex
Hermitean tridiagonal matrix has real values on its diagonal
and potentially complex numbers on its off-diagonals. By
applying a
similarity transform with an appropriate diagonal matrix
diag(1,eΛ{i \phy_1}, ... , eΛ{i \phy_{n-1}}), the
complex Hermitean
matrix can be transformed into a real symmetric matrix and
complex
arithmetic can be entirely avoided.)
While the
eigenvectors of the real symmetric tridiagonal matrix are
real,
the eigenvectors of original complex Hermitean matrix have
complex entries
in general.
Since LAPACK drivers overwrite the matrix data with the
eigenvectors,
CSTEMR accepts complex workspace to facilitate
interoperability
with CUNMTR or CUPMTR.
Parameters
JOBZ
JOBZ is
CHARACTER*1
= βNβ: Compute eigenvalues only;
= βVβ: Compute eigenvalues and eigenvectors.
RANGE
RANGE is
CHARACTER*1
= βAβ: all eigenvalues will be found.
= βVβ: all eigenvalues in the half-open interval
(VL,VU]
will be found.
= βIβ: the IL-th through IU-th eigenvalues will
be found.
N
N is INTEGER
The order of the matrix. N >= 0.
D
D is REAL
array, dimension (N)
On entry, the N diagonal elements of the tridiagonal matrix
T. On exit, D is overwritten.
E
E is REAL
array, dimension (N)
On entry, the (N-1) subdiagonal elements of the tridiagonal
matrix T in elements 1 to N-1 of E. E(N) need not be set on
input, but is used internally as workspace.
On exit, E is overwritten.
VL
VL is REAL
If
RANGE=βVβ, the lower bound of the interval to
be searched for eigenvalues. VL < VU.
Not referenced if RANGE = βAβ or
βIβ.
VU
VU is REAL
If
RANGE=βVβ, the upper bound of the interval to
be searched for eigenvalues. VL < VU.
Not referenced if RANGE = βAβ or
βIβ.
IL
IL is INTEGER
If
RANGE=βIβ, the index of the
smallest eigenvalue to be returned.
1 <= IL <= IU <= N, if N > 0.
Not referenced if RANGE = βAβ or
βVβ.
IU
IU is INTEGER
If
RANGE=βIβ, the index of the
largest eigenvalue to be returned.
1 <= IL <= IU <= N, if N > 0.
Not referenced if RANGE = βAβ or
βVβ.
M
M is INTEGER
The total number of eigenvalues found. 0 <= M <= N.
If RANGE = βAβ, M = N, and if RANGE =
βIβ, M = IU-IL+1.
W
W is REAL
array, dimension (N)
The first M elements contain the selected eigenvalues in
ascending order.
Z
Z is COMPLEX
array, dimension (LDZ, max(1,M) )
If JOBZ = βVβ, and if INFO = 0, then the first M
columns of Z
contain the orthonormal eigenvectors of the matrix T
corresponding to the selected eigenvalues, with the i-th
column of Z holding the eigenvector associated with W(i).
If JOBZ = βNβ, then Z is not referenced.
Note: the user must ensure that at least max(1,M) columns
are
supplied in the array Z; if RANGE = βVβ, the
exact value of M
is not known in advance and can be computed with a workspace
query by setting NZC = -1, see below.
LDZ
LDZ is INTEGER
The leading dimension of the array Z. LDZ >= 1, and if
JOBZ = βVβ, then LDZ >= max(1,N).
NZC
NZC is INTEGER
The number of eigenvectors to be held in the array Z.
If RANGE = βAβ, then NZC >= max(1,N).
If RANGE = βVβ, then NZC >= the number of
eigenvalues in (VL,VU].
If RANGE = βIβ, then NZC >= IU-IL+1.
If NZC = -1, then a workspace query is assumed; the
routine calculates the number of columns of the array Z that
are needed to hold the eigenvectors.
This value is returned as the first entry of the Z array,
and
no error message related to NZC is issued by XERBLA.
ISUPPZ
ISUPPZ is
INTEGER array, dimension ( 2*max(1,M) )
The support of the eigenvectors in Z, i.e., the indices
indicating the nonzero elements in Z. The i-th computed
eigenvector
is nonzero only in elements ISUPPZ( 2*i-1 ) through
ISUPPZ( 2*i ). This is relevant in the case when the matrix
is split. ISUPPZ is only accessed when JOBZ is
βVβ and N > 0.
TRYRAC
TRYRAC is
LOGICAL
If TRYRAC = .TRUE., indicates that the code should check
whether
the tridiagonal matrix defines its eigenvalues to high
relative
accuracy. If so, the code uses relative-accuracy preserving
algorithms that might be (a bit) slower depending on the
matrix.
If the matrix does not define its eigenvalues to high
relative
accuracy, the code can uses possibly faster algorithms.
If TRYRAC = .FALSE., the code is not required to guarantee
relatively accurate eigenvalues and can use the fastest
possible
techniques.
On exit, a .TRUE. TRYRAC will be set to .FALSE. if the
matrix
does not define its eigenvalues to high relative
accuracy.
WORK
WORK is REAL
array, dimension (LWORK)
On exit, if INFO = 0, WORK(1) returns the optimal
(and minimal) LWORK.
LWORK
LWORK is
INTEGER
The dimension of the array WORK. LWORK >= max(1,18*N)
if JOBZ = βVβ, and LWORK >= max(1,12*N) if
JOBZ = βNβ.
If LWORK = -1, then a workspace query is assumed; the
routine
only calculates the optimal size of the WORK array, returns
this value as the first entry of the WORK array, and no
error
message related to LWORK is issued by XERBLA.
IWORK
IWORK is
INTEGER array, dimension (LIWORK)
On exit, if INFO = 0, IWORK(1) returns the optimal
LIWORK.
LIWORK
LIWORK is
INTEGER
The dimension of the array IWORK. LIWORK >= max(1,10*N)
if the eigenvectors are desired, and LIWORK >= max(1,8*N)
if only the eigenvalues are to be computed.
If LIWORK = -1, then a workspace query is assumed; the
routine only calculates the optimal size of the IWORK array,
returns this value as the first entry of the IWORK array,
and
no error message related to LIWORK is issued by XERBLA.
INFO
INFO is INTEGER
On exit, INFO
= 0: successful exit
< 0: if INFO = -i, the i-th argument had an illegal value
> 0: if INFO = 1X, internal error in SLARRE,
if INFO = 2X, internal error in CLARRV.
Here, the digit X = ABS( IINFO ) < 10, where IINFO is
the nonzero error code returned by SLARRE or
CLARRV, respectively.
Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
Contributors:
Beresford Parlett, University
of California, Berkeley, USA
Jim Demmel, University of California, Berkeley, USA
Inderjit Dhillon, University of Texas, Austin, USA
Osni Marques, LBNL/NERSC, USA
Christof Voemel, University of California, Berkeley, USA
Aravindh Krishnamoorthy, FAU, Erlangen, Germany
subroutine dstemr (character jobz, character range, integer n, doubleprecision, dimension( * ) d, double precision, dimension( * ) e, doubleprecision vl, double precision vu, integer il, integer iu, integer m,double precision, dimension( * ) w, double precision, dimension( ldz, *) z, integer ldz, integer nzc, integer, dimension( * ) isuppz, logicaltryrac, double precision, dimension( * ) work, integer lwork, integer,dimension( * ) iwork, integer liwork, integer info)
DSTEMR
Purpose:
DSTEMR computes
selected eigenvalues and, optionally, eigenvectors
of a real symmetric tridiagonal matrix T. Any such unreduced
matrix has
a well defined set of pairwise different real eigenvalues,
the corresponding
real eigenvectors are pairwise orthogonal.
The spectrum
may be computed either completely or partially by specifying
either an interval (VL,VU] or a range of indices IL:IU for
the desired
eigenvalues.
Depending on
the number of desired eigenvalues, these are computed either
by bisection or the dqds algorithm. Numerically orthogonal
eigenvectors are
computed by the use of various suitable L D LΛT
factorizations near clusters
of close eigenvalues (referred to as RRRs, Relatively Robust
Representations). An informal sketch of the algorithm
follows.
For each
unreduced block (submatrix) of T,
(a) Compute T - sigma I = L D LΛT, so that L and D
define all the wanted eigenvalues to high relative accuracy.
This means that small relative changes in the entries of D
and L
cause only small relative changes in the eigenvalues and
eigenvectors. The standard (unfactored) representation of
the
tridiagonal matrix T does not have this property in general.
(b) Compute the eigenvalues to suitable accuracy.
If the eigenvectors are desired, the algorithm attains full
accuracy of the computed eigenvalues only right before
the corresponding vectors have to be computed, see steps c)
and d).
(c) For each cluster of close eigenvalues, select a new
shift close to the cluster, find a new factorization, and
refine
the shifted eigenvalues to suitable accuracy.
(d) For each eigenvalue with a large enough relative
separation compute
the corresponding eigenvector by forming a rank revealing
twisted
factorization. Go back to (c) for any clusters that
remain.
For more
details, see:
- Inderjit S. Dhillon and Beresford N. Parlett:
βMultiple representations
to compute orthogonal eigenvectors of symmetric tridiagonal
matrices,β
Linear Algebra and its Applications, 387(1), pp. 1-28,
August 2004.
- Inderjit Dhillon and Beresford Parlett: βOrthogonal
Eigenvectors and
Relative Gaps,β SIAM Journal on Matrix Analysis and
Applications, Vol. 25,
2004. Also LAPACK Working Note 154.
- Inderjit Dhillon: βA new O(nΛ2) algorithm for
the symmetric
tridiagonal eigenvalue/eigenvector problemβ,
Computer Science Division Technical Report No.
UCB/CSD-97-971,
UC Berkeley, May 1997.
Further Details
1.DSTEMR works only on machines which follow IEEE-754
floating-point standard in their handling of infinities and
NaNs.
This permits the use of efficient inner loops avoiding a
check for
zero divisors.
Parameters
JOBZ
JOBZ is
CHARACTER*1
= βNβ: Compute eigenvalues only;
= βVβ: Compute eigenvalues and eigenvectors.
RANGE
RANGE is
CHARACTER*1
= βAβ: all eigenvalues will be found.
= βVβ: all eigenvalues in the half-open interval
(VL,VU]
will be found.
= βIβ: the IL-th through IU-th eigenvalues will
be found.
N
N is INTEGER
The order of the matrix. N >= 0.
D
D is DOUBLE
PRECISION array, dimension (N)
On entry, the N diagonal elements of the tridiagonal matrix
T. On exit, D is overwritten.
E
E is DOUBLE
PRECISION array, dimension (N)
On entry, the (N-1) subdiagonal elements of the tridiagonal
matrix T in elements 1 to N-1 of E. E(N) need not be set on
input, but is used internally as workspace.
On exit, E is overwritten.
VL
VL is DOUBLE PRECISION
If
RANGE=βVβ, the lower bound of the interval to
be searched for eigenvalues. VL < VU.
Not referenced if RANGE = βAβ or
βIβ.
VU
VU is DOUBLE PRECISION
If
RANGE=βVβ, the upper bound of the interval to
be searched for eigenvalues. VL < VU.
Not referenced if RANGE = βAβ or
βIβ.
IL
IL is INTEGER
If
RANGE=βIβ, the index of the
smallest eigenvalue to be returned.
1 <= IL <= IU <= N, if N > 0.
Not referenced if RANGE = βAβ or
βVβ.
IU
IU is INTEGER
If
RANGE=βIβ, the index of the
largest eigenvalue to be returned.
1 <= IL <= IU <= N, if N > 0.
Not referenced if RANGE = βAβ or
βVβ.
M
M is INTEGER
The total number of eigenvalues found. 0 <= M <= N.
If RANGE = βAβ, M = N, and if RANGE =
βIβ, M = IU-IL+1.
W
W is DOUBLE
PRECISION array, dimension (N)
The first M elements contain the selected eigenvalues in
ascending order.
Z
Z is DOUBLE
PRECISION array, dimension (LDZ, max(1,M) )
If JOBZ = βVβ, and if INFO = 0, then the first M
columns of Z
contain the orthonormal eigenvectors of the matrix T
corresponding to the selected eigenvalues, with the i-th
column of Z holding the eigenvector associated with W(i).
If JOBZ = βNβ, then Z is not referenced.
Note: the user must ensure that at least max(1,M) columns
are
supplied in the array Z; if RANGE = βVβ, the
exact value of M
is not known in advance and can be computed with a workspace
query by setting NZC = -1, see below.
LDZ
LDZ is INTEGER
The leading dimension of the array Z. LDZ >= 1, and if
JOBZ = βVβ, then LDZ >= max(1,N).
NZC
NZC is INTEGER
The number of eigenvectors to be held in the array Z.
If RANGE = βAβ, then NZC >= max(1,N).
If RANGE = βVβ, then NZC >= the number of
eigenvalues in (VL,VU].
If RANGE = βIβ, then NZC >= IU-IL+1.
If NZC = -1, then a workspace query is assumed; the
routine calculates the number of columns of the array Z that
are needed to hold the eigenvectors.
This value is returned as the first entry of the Z array,
and
no error message related to NZC is issued by XERBLA.
ISUPPZ
ISUPPZ is
INTEGER array, dimension ( 2*max(1,M) )
The support of the eigenvectors in Z, i.e., the indices
indicating the nonzero elements in Z. The i-th computed
eigenvector
is nonzero only in elements ISUPPZ( 2*i-1 ) through
ISUPPZ( 2*i ). This is relevant in the case when the matrix
is split. ISUPPZ is only accessed when JOBZ is
βVβ and N > 0.
TRYRAC
TRYRAC is
LOGICAL
If TRYRAC = .TRUE., indicates that the code should check
whether
the tridiagonal matrix defines its eigenvalues to high
relative
accuracy. If so, the code uses relative-accuracy preserving
algorithms that might be (a bit) slower depending on the
matrix.
If the matrix does not define its eigenvalues to high
relative
accuracy, the code can uses possibly faster algorithms.
If TRYRAC = .FALSE., the code is not required to guarantee
relatively accurate eigenvalues and can use the fastest
possible
techniques.
On exit, a .TRUE. TRYRAC will be set to .FALSE. if the
matrix
does not define its eigenvalues to high relative
accuracy.
WORK
WORK is DOUBLE
PRECISION array, dimension (LWORK)
On exit, if INFO = 0, WORK(1) returns the optimal
(and minimal) LWORK.
LWORK
LWORK is
INTEGER
The dimension of the array WORK. LWORK >= max(1,18*N)
if JOBZ = βVβ, and LWORK >= max(1,12*N) if
JOBZ = βNβ.
If LWORK = -1, then a workspace query is assumed; the
routine
only calculates the optimal size of the WORK array, returns
this value as the first entry of the WORK array, and no
error
message related to LWORK is issued by XERBLA.
IWORK
IWORK is
INTEGER array, dimension (LIWORK)
On exit, if INFO = 0, IWORK(1) returns the optimal
LIWORK.
LIWORK
LIWORK is
INTEGER
The dimension of the array IWORK. LIWORK >= max(1,10*N)
if the eigenvectors are desired, and LIWORK >= max(1,8*N)
if only the eigenvalues are to be computed.
If LIWORK = -1, then a workspace query is assumed; the
routine only calculates the optimal size of the IWORK array,
returns this value as the first entry of the IWORK array,
and
no error message related to LIWORK is issued by XERBLA.
INFO
INFO is INTEGER
On exit, INFO
= 0: successful exit
< 0: if INFO = -i, the i-th argument had an illegal value
> 0: if INFO = 1X, internal error in DLARRE,
if INFO = 2X, internal error in DLARRV.
Here, the digit X = ABS( IINFO ) < 10, where IINFO is
the nonzero error code returned by DLARRE or
DLARRV, respectively.
Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
Contributors:
Beresford Parlett, University
of California, Berkeley, USA
Jim Demmel, University of California, Berkeley, USA
Inderjit Dhillon, University of Texas, Austin, USA
Osni Marques, LBNL/NERSC, USA
Christof Voemel, University of California, Berkeley, USA
Aravindh Krishnamoorthy, FAU, Erlangen, Germany
subroutine sstemr (character jobz, character range, integer n, real,dimension( * ) d, real, dimension( * ) e, real vl, real vu, integer il,integer iu, integer m, real, dimension( * ) w, real, dimension( ldz, *) z, integer ldz, integer nzc, integer, dimension( * ) isuppz, logicaltryrac, real, dimension( * ) work, integer lwork, integer, dimension( *) iwork, integer liwork, integer info)
SSTEMR
Purpose:
SSTEMR computes
selected eigenvalues and, optionally, eigenvectors
of a real symmetric tridiagonal matrix T. Any such unreduced
matrix has
a well defined set of pairwise different real eigenvalues,
the corresponding
real eigenvectors are pairwise orthogonal.
The spectrum
may be computed either completely or partially by specifying
either an interval (VL,VU] or a range of indices IL:IU for
the desired
eigenvalues.
Depending on
the number of desired eigenvalues, these are computed either
by bisection or the dqds algorithm. Numerically orthogonal
eigenvectors are
computed by the use of various suitable L D LΛT
factorizations near clusters
of close eigenvalues (referred to as RRRs, Relatively Robust
Representations). An informal sketch of the algorithm
follows.
For each
unreduced block (submatrix) of T,
(a) Compute T - sigma I = L D LΛT, so that L and D
define all the wanted eigenvalues to high relative accuracy.
This means that small relative changes in the entries of D
and L
cause only small relative changes in the eigenvalues and
eigenvectors. The standard (unfactored) representation of
the
tridiagonal matrix T does not have this property in general.
(b) Compute the eigenvalues to suitable accuracy.
If the eigenvectors are desired, the algorithm attains full
accuracy of the computed eigenvalues only right before
the corresponding vectors have to be computed, see steps c)
and d).
(c) For each cluster of close eigenvalues, select a new
shift close to the cluster, find a new factorization, and
refine
the shifted eigenvalues to suitable accuracy.
(d) For each eigenvalue with a large enough relative
separation compute
the corresponding eigenvector by forming a rank revealing
twisted
factorization. Go back to (c) for any clusters that
remain.
For more
details, see:
- Inderjit S. Dhillon and Beresford N. Parlett:
βMultiple representations
to compute orthogonal eigenvectors of symmetric tridiagonal
matrices,β
Linear Algebra and its Applications, 387(1), pp. 1-28,
August 2004.
- Inderjit Dhillon and Beresford Parlett: βOrthogonal
Eigenvectors and
Relative Gaps,β SIAM Journal on Matrix Analysis and
Applications, Vol. 25,
2004. Also LAPACK Working Note 154.
- Inderjit Dhillon: βA new O(nΛ2) algorithm for
the symmetric
tridiagonal eigenvalue/eigenvector problemβ,
Computer Science Division Technical Report No.
UCB/CSD-97-971,
UC Berkeley, May 1997.
Further Details
1.SSTEMR works only on machines which follow IEEE-754
floating-point standard in their handling of infinities and
NaNs.
This permits the use of efficient inner loops avoiding a
check for
zero divisors.
Parameters
JOBZ
JOBZ is
CHARACTER*1
= βNβ: Compute eigenvalues only;
= βVβ: Compute eigenvalues and eigenvectors.
RANGE
RANGE is
CHARACTER*1
= βAβ: all eigenvalues will be found.
= βVβ: all eigenvalues in the half-open interval
(VL,VU]
will be found.
= βIβ: the IL-th through IU-th eigenvalues will
be found.
N
N is INTEGER
The order of the matrix. N >= 0.
D
D is REAL
array, dimension (N)
On entry, the N diagonal elements of the tridiagonal matrix
T. On exit, D is overwritten.
E
E is REAL
array, dimension (N)
On entry, the (N-1) subdiagonal elements of the tridiagonal
matrix T in elements 1 to N-1 of E. E(N) need not be set on
input, but is used internally as workspace.
On exit, E is overwritten.
VL
VL is REAL
If
RANGE=βVβ, the lower bound of the interval to
be searched for eigenvalues. VL < VU.
Not referenced if RANGE = βAβ or
βIβ.
VU
VU is REAL
If
RANGE=βVβ, the upper bound of the interval to
be searched for eigenvalues. VL < VU.
Not referenced if RANGE = βAβ or
βIβ.
IL
IL is INTEGER
If
RANGE=βIβ, the index of the
smallest eigenvalue to be returned.
1 <= IL <= IU <= N, if N > 0.
Not referenced if RANGE = βAβ or
βVβ.
IU
IU is INTEGER
If
RANGE=βIβ, the index of the
largest eigenvalue to be returned.
1 <= IL <= IU <= N, if N > 0.
Not referenced if RANGE = βAβ or
βVβ.
M
M is INTEGER
The total number of eigenvalues found. 0 <= M <= N.
If RANGE = βAβ, M = N, and if RANGE =
βIβ, M = IU-IL+1.
W
W is REAL
array, dimension (N)
The first M elements contain the selected eigenvalues in
ascending order.
Z
Z is REAL
array, dimension (LDZ, max(1,M) )
If JOBZ = βVβ, and if INFO = 0, then the first M
columns of Z
contain the orthonormal eigenvectors of the matrix T
corresponding to the selected eigenvalues, with the i-th
column of Z holding the eigenvector associated with W(i).
If JOBZ = βNβ, then Z is not referenced.
Note: the user must ensure that at least max(1,M) columns
are
supplied in the array Z; if RANGE = βVβ, the
exact value of M
is not known in advance and can be computed with a workspace
query by setting NZC = -1, see below.
LDZ
LDZ is INTEGER
The leading dimension of the array Z. LDZ >= 1, and if
JOBZ = βVβ, then LDZ >= max(1,N).
NZC
NZC is INTEGER
The number of eigenvectors to be held in the array Z.
If RANGE = βAβ, then NZC >= max(1,N).
If RANGE = βVβ, then NZC >= the number of
eigenvalues in (VL,VU].
If RANGE = βIβ, then NZC >= IU-IL+1.
If NZC = -1, then a workspace query is assumed; the
routine calculates the number of columns of the array Z that
are needed to hold the eigenvectors.
This value is returned as the first entry of the Z array,
and
no error message related to NZC is issued by XERBLA.
ISUPPZ
ISUPPZ is
INTEGER array, dimension ( 2*max(1,M) )
The support of the eigenvectors in Z, i.e., the indices
indicating the nonzero elements in Z. The i-th computed
eigenvector
is nonzero only in elements ISUPPZ( 2*i-1 ) through
ISUPPZ( 2*i ). This is relevant in the case when the matrix
is split. ISUPPZ is only accessed when JOBZ is
βVβ and N > 0.
TRYRAC
TRYRAC is
LOGICAL
If TRYRAC = .TRUE., indicates that the code should check
whether
the tridiagonal matrix defines its eigenvalues to high
relative
accuracy. If so, the code uses relative-accuracy preserving
algorithms that might be (a bit) slower depending on the
matrix.
If the matrix does not define its eigenvalues to high
relative
accuracy, the code can uses possibly faster algorithms.
If TRYRAC = .FALSE., the code is not required to guarantee
relatively accurate eigenvalues and can use the fastest
possible
techniques.
On exit, a .TRUE. TRYRAC will be set to .FALSE. if the
matrix
does not define its eigenvalues to high relative
accuracy.
WORK
WORK is REAL
array, dimension (LWORK)
On exit, if INFO = 0, WORK(1) returns the optimal
(and minimal) LWORK.
LWORK
LWORK is
INTEGER
The dimension of the array WORK. LWORK >= max(1,18*N)
if JOBZ = βVβ, and LWORK >= max(1,12*N) if
JOBZ = βNβ.
If LWORK = -1, then a workspace query is assumed; the
routine
only calculates the optimal size of the WORK array, returns
this value as the first entry of the WORK array, and no
error
message related to LWORK is issued by XERBLA.
IWORK
IWORK is
INTEGER array, dimension (LIWORK)
On exit, if INFO = 0, IWORK(1) returns the optimal
LIWORK.
LIWORK
LIWORK is
INTEGER
The dimension of the array IWORK. LIWORK >= max(1,10*N)
if the eigenvectors are desired, and LIWORK >= max(1,8*N)
if only the eigenvalues are to be computed.
If LIWORK = -1, then a workspace query is assumed; the
routine only calculates the optimal size of the IWORK array,
returns this value as the first entry of the IWORK array,
and
no error message related to LIWORK is issued by XERBLA.
INFO
INFO is INTEGER
On exit, INFO
= 0: successful exit
< 0: if INFO = -i, the i-th argument had an illegal value
> 0: if INFO = 1X, internal error in SLARRE,
if INFO = 2X, internal error in SLARRV.
Here, the digit X = ABS( IINFO ) < 10, where IINFO is
the nonzero error code returned by SLARRE or
SLARRV, respectively.
Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
Contributors:
Beresford Parlett, University
of California, Berkeley, USA
Jim Demmel, University of California, Berkeley, USA
Inderjit Dhillon, University of Texas, Austin, USA
Osni Marques, LBNL/NERSC, USA
Christof Voemel, University of California, Berkeley, USA
Aravindh Krishnamoorthy, FAU, Erlangen, Germany
subroutine zstemr (character jobz, character range, integer n, doubleprecision, dimension( * ) d, double precision, dimension( * ) e, doubleprecision vl, double precision vu, integer il, integer iu, integer m,double precision, dimension( * ) w, complex*16, dimension( ldz, * ) z,integer ldz, integer nzc, integer, dimension( * ) isuppz, logicaltryrac, double precision, dimension( * ) work, integer lwork, integer,dimension( * ) iwork, integer liwork, integer info)
ZSTEMR
Purpose:
ZSTEMR computes
selected eigenvalues and, optionally, eigenvectors
of a real symmetric tridiagonal matrix T. Any such unreduced
matrix has
a well defined set of pairwise different real eigenvalues,
the corresponding
real eigenvectors are pairwise orthogonal.
The spectrum
may be computed either completely or partially by specifying
either an interval (VL,VU] or a range of indices IL:IU for
the desired
eigenvalues.
Depending on
the number of desired eigenvalues, these are computed either
by bisection or the dqds algorithm. Numerically orthogonal
eigenvectors are
computed by the use of various suitable L D LΛT
factorizations near clusters
of close eigenvalues (referred to as RRRs, Relatively Robust
Representations). An informal sketch of the algorithm
follows.
For each
unreduced block (submatrix) of T,
(a) Compute T - sigma I = L D LΛT, so that L and D
define all the wanted eigenvalues to high relative accuracy.
This means that small relative changes in the entries of D
and L
cause only small relative changes in the eigenvalues and
eigenvectors. The standard (unfactored) representation of
the
tridiagonal matrix T does not have this property in general.
(b) Compute the eigenvalues to suitable accuracy.
If the eigenvectors are desired, the algorithm attains full
accuracy of the computed eigenvalues only right before
the corresponding vectors have to be computed, see steps c)
and d).
(c) For each cluster of close eigenvalues, select a new
shift close to the cluster, find a new factorization, and
refine
the shifted eigenvalues to suitable accuracy.
(d) For each eigenvalue with a large enough relative
separation compute
the corresponding eigenvector by forming a rank revealing
twisted
factorization. Go back to (c) for any clusters that
remain.
For more
details, see:
- Inderjit S. Dhillon and Beresford N. Parlett:
βMultiple representations
to compute orthogonal eigenvectors of symmetric tridiagonal
matrices,β
Linear Algebra and its Applications, 387(1), pp. 1-28,
August 2004.
- Inderjit Dhillon and Beresford Parlett: βOrthogonal
Eigenvectors and
Relative Gaps,β SIAM Journal on Matrix Analysis and
Applications, Vol. 25,
2004. Also LAPACK Working Note 154.
- Inderjit Dhillon: βA new O(nΛ2) algorithm for
the symmetric
tridiagonal eigenvalue/eigenvector problemβ,
Computer Science Division Technical Report No.
UCB/CSD-97-971,
UC Berkeley, May 1997.
Further Details
1.ZSTEMR works only on machines which follow IEEE-754
floating-point standard in their handling of infinities and
NaNs.
This permits the use of efficient inner loops avoiding a
check for
zero divisors.
2. LAPACK
routines can be used to reduce a complex Hermitean matrix to
real symmetric tridiagonal form.
(Any complex
Hermitean tridiagonal matrix has real values on its diagonal
and potentially complex numbers on its off-diagonals. By
applying a
similarity transform with an appropriate diagonal matrix
diag(1,eΛ{i \phy_1}, ... , eΛ{i \phy_{n-1}}), the
complex Hermitean
matrix can be transformed into a real symmetric matrix and
complex
arithmetic can be entirely avoided.)
While the
eigenvectors of the real symmetric tridiagonal matrix are
real,
the eigenvectors of original complex Hermitean matrix have
complex entries
in general.
Since LAPACK drivers overwrite the matrix data with the
eigenvectors,
ZSTEMR accepts complex workspace to facilitate
interoperability
with ZUNMTR or ZUPMTR.
Parameters
JOBZ
JOBZ is
CHARACTER*1
= βNβ: Compute eigenvalues only;
= βVβ: Compute eigenvalues and eigenvectors.
RANGE
RANGE is
CHARACTER*1
= βAβ: all eigenvalues will be found.
= βVβ: all eigenvalues in the half-open interval
(VL,VU]
will be found.
= βIβ: the IL-th through IU-th eigenvalues will
be found.
N
N is INTEGER
The order of the matrix. N >= 0.
D
D is DOUBLE
PRECISION array, dimension (N)
On entry, the N diagonal elements of the tridiagonal matrix
T. On exit, D is overwritten.
E
E is DOUBLE
PRECISION array, dimension (N)
On entry, the (N-1) subdiagonal elements of the tridiagonal
matrix T in elements 1 to N-1 of E. E(N) need not be set on
input, but is used internally as workspace.
On exit, E is overwritten.
VL
VL is DOUBLE PRECISION
If
RANGE=βVβ, the lower bound of the interval to
be searched for eigenvalues. VL < VU.
Not referenced if RANGE = βAβ or
βIβ.
VU
VU is DOUBLE PRECISION
If
RANGE=βVβ, the upper bound of the interval to
be searched for eigenvalues. VL < VU.
Not referenced if RANGE = βAβ or
βIβ.
IL
IL is INTEGER
If
RANGE=βIβ, the index of the
smallest eigenvalue to be returned.
1 <= IL <= IU <= N, if N > 0.
Not referenced if RANGE = βAβ or
βVβ.
IU
IU is INTEGER
If
RANGE=βIβ, the index of the
largest eigenvalue to be returned.
1 <= IL <= IU <= N, if N > 0.
Not referenced if RANGE = βAβ or
βVβ.
M
M is INTEGER
The total number of eigenvalues found. 0 <= M <= N.
If RANGE = βAβ, M = N, and if RANGE =
βIβ, M = IU-IL+1.
W
W is DOUBLE
PRECISION array, dimension (N)
The first M elements contain the selected eigenvalues in
ascending order.
Z
Z is COMPLEX*16
array, dimension (LDZ, max(1,M) )
If JOBZ = βVβ, and if INFO = 0, then the first M
columns of Z
contain the orthonormal eigenvectors of the matrix T
corresponding to the selected eigenvalues, with the i-th
column of Z holding the eigenvector associated with W(i).
If JOBZ = βNβ, then Z is not referenced.
Note: the user must ensure that at least max(1,M) columns
are
supplied in the array Z; if RANGE = βVβ, the
exact value of M
is not known in advance and can be computed with a workspace
query by setting NZC = -1, see below.
LDZ
LDZ is INTEGER
The leading dimension of the array Z. LDZ >= 1, and if
JOBZ = βVβ, then LDZ >= max(1,N).
NZC
NZC is INTEGER
The number of eigenvectors to be held in the array Z.
If RANGE = βAβ, then NZC >= max(1,N).
If RANGE = βVβ, then NZC >= the number of
eigenvalues in (VL,VU].
If RANGE = βIβ, then NZC >= IU-IL+1.
If NZC = -1, then a workspace query is assumed; the
routine calculates the number of columns of the array Z that
are needed to hold the eigenvectors.
This value is returned as the first entry of the Z array,
and
no error message related to NZC is issued by XERBLA.
ISUPPZ
ISUPPZ is
INTEGER array, dimension ( 2*max(1,M) )
The support of the eigenvectors in Z, i.e., the indices
indicating the nonzero elements in Z. The i-th computed
eigenvector
is nonzero only in elements ISUPPZ( 2*i-1 ) through
ISUPPZ( 2*i ). This is relevant in the case when the matrix
is split. ISUPPZ is only accessed when JOBZ is
βVβ and N > 0.
TRYRAC
TRYRAC is
LOGICAL
If TRYRAC = .TRUE., indicates that the code should check
whether
the tridiagonal matrix defines its eigenvalues to high
relative
accuracy. If so, the code uses relative-accuracy preserving
algorithms that might be (a bit) slower depending on the
matrix.
If the matrix does not define its eigenvalues to high
relative
accuracy, the code can uses possibly faster algorithms.
If TRYRAC = .FALSE., the code is not required to guarantee
relatively accurate eigenvalues and can use the fastest
possible
techniques.
On exit, a .TRUE. TRYRAC will be set to .FALSE. if the
matrix
does not define its eigenvalues to high relative
accuracy.
WORK
WORK is DOUBLE
PRECISION array, dimension (LWORK)
On exit, if INFO = 0, WORK(1) returns the optimal
(and minimal) LWORK.
LWORK
LWORK is
INTEGER
The dimension of the array WORK. LWORK >= max(1,18*N)
if JOBZ = βVβ, and LWORK >= max(1,12*N) if
JOBZ = βNβ.
If LWORK = -1, then a workspace query is assumed; the
routine
only calculates the optimal size of the WORK array, returns
this value as the first entry of the WORK array, and no
error
message related to LWORK is issued by XERBLA.
IWORK
IWORK is
INTEGER array, dimension (LIWORK)
On exit, if INFO = 0, IWORK(1) returns the optimal
LIWORK.
LIWORK
LIWORK is
INTEGER
The dimension of the array IWORK. LIWORK >= max(1,10*N)
if the eigenvectors are desired, and LIWORK >= max(1,8*N)
if only the eigenvalues are to be computed.
If LIWORK = -1, then a workspace query is assumed; the
routine only calculates the optimal size of the IWORK array,
returns this value as the first entry of the IWORK array,
and
no error message related to LIWORK is issued by XERBLA.
INFO
INFO is INTEGER
On exit, INFO
= 0: successful exit
< 0: if INFO = -i, the i-th argument had an illegal value
> 0: if INFO = 1X, internal error in DLARRE,
if INFO = 2X, internal error in ZLARRV.
Here, the digit X = ABS( IINFO ) < 10, where IINFO is
the nonzero error code returned by DLARRE or
ZLARRV, respectively.
Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
Contributors:
Beresford Parlett, University
of California, Berkeley, USA
Jim Demmel, University of California, Berkeley, USA
Inderjit Dhillon, University of Texas, Austin, USA
Osni Marques, LBNL/NERSC, USA
Christof Voemel, University of California, Berkeley, USA
Aravindh Krishnamoorthy, FAU, Erlangen, Germany
Author
Generated automatically by Doxygen for LAPACK from the source code.