1ZLAED7(1) LAPACK routine (version 3.1) ZLAED7(1)
2
3
4
6 ZLAED7 - the updated eigensystem of a diagonal matrix after modifica‐
7 tion by a rank-one symmetric matrix
8
10 SUBROUTINE ZLAED7( N, CUTPNT, QSIZ, TLVLS, CURLVL, CURPBM, D, Q, LDQ,
11 RHO, INDXQ, QSTORE, QPTR, PRMPTR, PERM, GIVPTR, GIV‐
12 COL, GIVNUM, WORK, RWORK, IWORK, INFO )
13
14 INTEGER CURLVL, CURPBM, CUTPNT, INFO, LDQ, N, QSIZ, TLVLS
15
16 DOUBLE PRECISION RHO
17
18 INTEGER GIVCOL( 2, * ), GIVPTR( * ), INDXQ( * ), IWORK( * ),
19 PERM( * ), PRMPTR( * ), QPTR( * )
20
21 DOUBLE PRECISION D( * ), GIVNUM( 2, * ), QSTORE( * ),
22 RWORK( * )
23
24 COMPLEX*16 Q( LDQ, * ), WORK( * )
25
27 ZLAED7 computes the updated eigensystem of a diagonal matrix after mod‐
28 ification by a rank-one symmetric matrix. This routine is used only for
29 the eigenproblem which requires all eigenvalues and optionally eigen‐
30 vectors of a dense or banded Hermitian matrix that has been reduced to
31 tridiagonal form.
32
33 T = Q(in) ( D(in) + RHO * Z*Z' ) Q'(in) = Q(out) * D(out) * Q'(out)
34
35 where Z = Q'u, u is a vector of length N with ones in the
36 CUTPNT and CUTPNT + 1 th elements and zeros elsewhere.
37
38 The eigenvectors of the original matrix are stored in Q, and the
39 eigenvalues are in D. The algorithm consists of three stages:
40
41 The first stage consists of deflating the size of the problem
42 when there are multiple eigenvalues or if there is a zero in
43 the Z vector. For each such occurence the dimension of the
44 secular equation problem is reduced by one. This stage is
45 performed by the routine DLAED2.
46
47 The second stage consists of calculating the updated
48 eigenvalues. This is done by finding the roots of the secular
49 equation via the routine DLAED4 (as called by SLAED3).
50 This routine also calculates the eigenvectors of the current
51 problem.
52
53 The final stage consists of computing the updated eigenvectors
54 directly using the updated eigenvalues. The eigenvectors for
55 the current problem are multiplied with the eigenvectors from
56 the overall problem.
57
58
60 N (input) INTEGER
61 The dimension of the symmetric tridiagonal matrix. N >= 0.
62
63 CUTPNT (input) INTEGER Contains the location of the last eigen‐
64 value in the leading sub-matrix. min(1,N) <= CUTPNT <= N.
65
66 QSIZ (input) INTEGER
67 The dimension of the unitary matrix used to reduce the full
68 matrix to tridiagonal form. QSIZ >= N.
69
70 TLVLS (input) INTEGER
71 The total number of merging levels in the overall divide and
72 conquer tree.
73
74 CURLVL (input) INTEGER The current level in the overall merge
75 routine, 0 <= curlvl <= tlvls.
76
77 CURPBM (input) INTEGER The current problem in the current level
78 in the overall merge routine (counting from upper left to lower
79 right).
80
81 D (input/output) DOUBLE PRECISION array, dimension (N)
82 On entry, the eigenvalues of the rank-1-perturbed matrix. On
83 exit, the eigenvalues of the repaired matrix.
84
85 Q (input/output) COMPLEX*16 array, dimension (LDQ,N)
86 On entry, the eigenvectors of the rank-1-perturbed matrix. On
87 exit, the eigenvectors of the repaired tridiagonal matrix.
88
89 LDQ (input) INTEGER
90 The leading dimension of the array Q. LDQ >= max(1,N).
91
92 RHO (input) DOUBLE PRECISION
93 Contains the subdiagonal element used to create the rank-1 modi‐
94 fication.
95
96 INDXQ (output) INTEGER array, dimension (N)
97 This contains the permutation which will reintegrate the sub‐
98 problem just solved back into sorted order, ie. D( INDXQ( I = 1,
99 N ) ) will be in ascending order.
100
101 IWORK (workspace) INTEGER array, dimension (4*N)
102
103 RWORK (workspace) DOUBLE PRECISION array,
104 dimension (3*N+2*QSIZ*N)
105
106 WORK (workspace) COMPLEX*16 array, dimension (QSIZ*N)
107
108 QSTORE (input/output) DOUBLE PRECISION array, dimension (N**2+1)
109 Stores eigenvectors of submatrices encountered during divide and
110 conquer, packed together. QPTR points to beginning of the subma‐
111 trices.
112
113 QPTR (input/output) INTEGER array, dimension (N+2)
114 List of indices pointing to beginning of submatrices stored in
115 QSTORE. The submatrices are numbered starting at the bottom left
116 of the divide and conquer tree, from left to right and bottom to
117 top.
118
119 PRMPTR (input) INTEGER array, dimension (N lg N) Contains a list
120 of pointers which indicate where in PERM a level's permutation
121 is stored. PRMPTR(i+1) - PRMPTR(i) indicates the size of the
122 permutation and also the size of the full, non-deflated problem.
123
124 PERM (input) INTEGER array, dimension (N lg N)
125 Contains the permutations (from deflation and sorting) to be
126 applied to each eigenblock.
127
128 GIVPTR (input) INTEGER array, dimension (N lg N) Contains a list
129 of pointers which indicate where in GIVCOL a level's Givens
130 rotations are stored. GIVPTR(i+1) - GIVPTR(i) indicates the
131 number of Givens rotations.
132
133 GIVCOL (input) INTEGER array, dimension (2, N lg N) Each pair of
134 numbers indicates a pair of columns to take place in a Givens
135 rotation.
136
137 GIVNUM (input) DOUBLE PRECISION array, dimension (2, N lg N)
138 Each number indicates the S value to be used in the correspond‐
139 ing Givens rotation.
140
141 INFO (output) INTEGER
142 = 0: successful exit.
143 < 0: if INFO = -i, the i-th argument had an illegal value.
144 > 0: if INFO = 1, an eigenvalue did not converge
145
146
147
148 LAPACK routine (version 3.1) November 2006 ZLAED7(1)