This section is concerned with the solution of the generalized eigenvalue problems , , and , where A and B are real symmetric or complex Hermitian and B is positive definite. Each of these problems can be reduced to a standard symmetric eigenvalue problem, using a Cholesky factorization of B as either B=LLT or B=UTU (LLH or UHU in the Hermitian case). In the case , if A and B are banded then this may also be exploited to get a faster algorithm.
With B = LLT, we have
Table 2.13 summarizes how each of the three types of problem may be reduced to standard form , and how the eigenvectors z of the original problem may be recovered from the eigenvectors y of the reduced problem. The table applies to real problems; for complex problems, transposed matrices must be replaced by conjugate-transposes.
Type of | Factorization | Reduction | Recovery of | |
problem | of B | eigenvectors | ||
1. | B = LLT | C = L-1 A L-T | z = L-T y | |
B = UTU | C = U-T A U-1 | z = U-1 y | ||
2. | B = LLT | C = LT A L | z = L-T y | |
B = UTU | C = U A UT | z = U-1 y | ||
3. | B = LLT | C = LT A L | z = L y | |
B = UTU | C = U A UT | z = UT y |
Given A and a Cholesky factorization of B, the routines xyyGST overwrite A with the matrix C of the corresponding standard problem (see Table 2.14). This may then be solved using the routines described in subsection 2.4.4. No special routines are needed to recover the eigenvectors z of the generalized problem from the eigenvectors y of the standard problem, because these computations are simple applications of Level 2 or Level 3 BLAS.
If the problem is
and the matrices A and B are banded,
the matrix C as defined above is, in general, full.
We can reduce the problem to a banded standard problem by modifying the
definition of C thus:
A further refinement is possible when A and B are banded, which halves
the amount of work required to form C (see Wilkinson [104]).
Instead of the standard Cholesky factorization of B as UT U or L LT,
we use a ``split Cholesky'' factorization B = ST S
(SH S if B is complex), where: