LAPACK 3.12.1
LAPACK: Linear Algebra PACKage
|
subroutine clar1v | ( | integer | n, |
integer | b1, | ||
integer | bn, | ||
real | lambda, | ||
real, dimension( * ) | d, | ||
real, dimension( * ) | l, | ||
real, dimension( * ) | ld, | ||
real, dimension( * ) | lld, | ||
real | pivmin, | ||
real | gaptol, | ||
complex, dimension( * ) | z, | ||
logical | wantnc, | ||
integer | negcnt, | ||
real | ztz, | ||
real | mingma, | ||
integer | r, | ||
integer, dimension( * ) | isuppz, | ||
real | nrminv, | ||
real | resid, | ||
real | rqcorr, | ||
real, dimension( * ) | work ) |
CLAR1V computes the (scaled) r-th column of the inverse of the submatrix in rows b1 through bn of the tridiagonal matrix LDLT - λI.
Download CLAR1V + dependencies [TGZ] [ZIP] [TXT]
!> !> CLAR1V computes the (scaled) r-th column of the inverse of !> the sumbmatrix in rows B1 through BN of the tridiagonal matrix !> L D L**T - sigma I. When sigma is close to an eigenvalue, the !> computed vector is an accurate eigenvector. Usually, r corresponds !> to the index where the eigenvector is largest in magnitude. !> The following steps accomplish this computation : !> (a) Stationary qd transform, L D L**T - sigma I = L(+) D(+) L(+)**T, !> (b) Progressive qd transform, L D L**T - sigma I = U(-) D(-) U(-)**T, !> (c) Computation of the diagonal elements of the inverse of !> L D L**T - sigma I by combining the above transforms, and choosing !> r as the index where the diagonal of the inverse is (one of the) !> largest in magnitude. !> (d) Computation of the (scaled) r-th column of the inverse using the !> twisted factorization obtained by combining the top part of the !> the stationary and the bottom part of the progressive transform. !>
[in] | N | !> N is INTEGER !> The order of the matrix L D L**T. !> |
[in] | B1 | !> B1 is INTEGER !> First index of the submatrix of L D L**T. !> |
[in] | BN | !> BN is INTEGER !> Last index of the submatrix of L D L**T. !> |
[in] | LAMBDA | !> LAMBDA is REAL !> The shift. In order to compute an accurate eigenvector, !> LAMBDA should be a good approximation to an eigenvalue !> of L D L**T. !> |
[in] | L | !> L is REAL array, dimension (N-1) !> The (n-1) subdiagonal elements of the unit bidiagonal matrix !> L, in elements 1 to N-1. !> |
[in] | D | !> D is REAL array, dimension (N) !> The n diagonal elements of the diagonal matrix D. !> |
[in] | LD | !> LD is REAL array, dimension (N-1) !> The n-1 elements L(i)*D(i). !> |
[in] | LLD | !> LLD is REAL array, dimension (N-1) !> The n-1 elements L(i)*L(i)*D(i). !> |
[in] | PIVMIN | !> PIVMIN is REAL !> The minimum pivot in the Sturm sequence. !> |
[in] | GAPTOL | !> GAPTOL is REAL !> Tolerance that indicates when eigenvector entries are negligible !> w.r.t. their contribution to the residual. !> |
[in,out] | Z | !> Z is COMPLEX array, dimension (N) !> On input, all entries of Z must be set to 0. !> On output, Z contains the (scaled) r-th column of the !> inverse. The scaling is such that Z(R) equals 1. !> |
[in] | WANTNC | !> WANTNC is LOGICAL !> Specifies whether NEGCNT has to be computed. !> |
[out] | NEGCNT | !> NEGCNT is INTEGER !> If WANTNC is .TRUE. then NEGCNT = the number of pivots < pivmin !> in the matrix factorization L D L**T, and NEGCNT = -1 otherwise. !> |
[out] | ZTZ | !> ZTZ is REAL !> The square of the 2-norm of Z. !> |
[out] | MINGMA | !> MINGMA is REAL !> The reciprocal of the largest (in magnitude) diagonal !> element of the inverse of L D L**T - sigma I. !> |
[in,out] | R | !> R is INTEGER !> The twist index for the twisted factorization used to !> compute Z. !> On input, 0 <= R <= N. If R is input as 0, R is set to !> the index where (L D L**T - sigma I)^{-1} is largest !> in magnitude. If 1 <= R <= N, R is unchanged. !> On output, R contains the twist index used to compute Z. !> Ideally, R designates the position of the maximum entry in the !> eigenvector. !> |
[out] | ISUPPZ | !> ISUPPZ is INTEGER array, dimension (2) !> The support of the vector in Z, i.e., the vector Z is !> nonzero only in elements ISUPPZ(1) through ISUPPZ( 2 ). !> |
[out] | NRMINV | !> NRMINV is REAL !> NRMINV = 1/SQRT( ZTZ ) !> |
[out] | RESID | !> RESID is REAL !> The residual of the FP vector. !> RESID = ABS( MINGMA )/SQRT( ZTZ ) !> |
[out] | RQCORR | !> RQCORR is REAL !> The Rayleigh Quotient correction to LAMBDA. !> RQCORR = MINGMA*TMP !> |
[out] | WORK | !> WORK is REAL array, dimension (4*N) !> |
Definition at line 225 of file clar1v.f.