Content deleted Content added
Jitse Niesen (talk | contribs) →Conquer: it is not necessary to define f at all; this gets rid of possible confusion between definition and equation |
m Explain how to compute w with the value of beta and z |
||
(31 intermediate revisions by 25 users not shown) | |||
Line 1:
{{Short description|Algorithm on Hermitian matrices}}
'''Divide-and-conquer eigenvalue algorithms''' are a class of [[eigenvalue algorithm]]s for [[Hermitian matrix|Hermitian]] or [[real number|real]] [[Symmetric matrix|symmetric matrices]] that have recently (circa [[1990s]]) become competitive in terms of [[Numerical stability|stability]] and [[Computational complexity theory|efficiency]] with more traditional algorithms such as the [[QR algorithm]]. The basic concept behind these algorithms is of course the famous [[Divide and conquer algorithm|divide-and-conquer]] approach from [[computer science]]. An [[eigenvalue]] problem is divided into two problems of roughly half the size, each of these are solved [[Recursion|recursively]], and the eigenvalues of the original problem are computed from the results of these smaller problems.▼
{{Multiple issues|
{{No footnotes|date=May 2024}}
{{More citations needed|date=May 2024}}
}}
▲'''Divide-and-conquer eigenvalue algorithms''' are a class of [[eigenvalue algorithm]]s for [[Hermitian matrix|Hermitian]] or [[real number|real]] [[Symmetric matrix|symmetric matrices]] that have recently (circa
This article covers the basic idea of the algorithm as originally proposed by Cuppen in 1981, which is not numerically stable without additional refinements.
==Background==▼
▲==Background==
As with most eigenvalue algorithms for Hermitian matrices, divide-and-conquer begins with a reduction to [[Tridiagonal matrix|tridiagonal]] form. For an <math>m \times m</math> matrix, the standard method for this, via [[Householder reflection]]s, takes <math>\frac{4}{3}m^{3}</math>
In certain cases, it is possible to ''deflate'' an eigenvalue problem into smaller problems. Consider a [[block diagonal matrix]]
:<math>T = \begin{bmatrix} T_{1} & 0 \\ 0 & T_{2}\end{bmatrix}.</math>
The eigenvalues and eigenvectors of <math>T</math> are simply those of <math>T_{1}</math> and <math>T_{2}</math>, and it will almost always be faster to solve these two smaller problems than to solve the original problem all at once. This technique can be used to improve the efficiency of many eigenvalue algorithms, but it has special significance to divide-and-conquer.
For the rest of this article, we will assume the input to the divide-and-conquer algorithm is an <math>m \times m</math> real symmetric tridiagonal matrix <math>T</math>.
==Divide==
Line 17 ⟶ 22:
The ''divide'' part of the divide-and-conquer algorithm comes from the realization that a tridiagonal matrix is "almost" block diagonal.
<!-- For original TeX, see image description page -->
:[[Image:
The size of submatrix <math>T_{1}</math> we will call <math>n \times n</math>, and then <math>T_{2}</math> is <math>(m - n) \times (m - n)</math>.
We write <math>T</math> as a block diagonal matrix, plus a [[Rank (linear algebra)|rank-1]] correction:
<!-- For original TeX, see image description page -->
:[[Image:
The only difference between <math>T_{1}</math> and <math>\hat{T}_{1}</math> is that the lower right entry <math>t_{nn}</math> in <math>\hat{T}_{1}</math> has been replaced with <math>t_{nn} - \beta</math> and similarly, in <math>\hat{T}_{2}</math> the top left entry <math>t_{n+1,n+1}</math> has been replaced with <math>t_{n+1,n+1} - \beta</math>.
The remainder of the divide step is to solve for the eigenvalues (and if desired the eigenvectors) of <math>\hat{T}_{1}</math> and <math>\hat{T}_{2}</math>, that is to find the [[diagonalizable matrix|diagonalization]]s <math>\hat{T}_{1} = Q_{1} D_{1} Q_{1}^{T}</math> and <math>\hat{T}_{2} = Q_{2} D_{2} Q_{2}^{T}</math>. This can be accomplished with recursive calls to the divide-and-conquer algorithm, although practical implementations often switch to the QR algorithm for small enough submatrices.
==Conquer==
Line 36 ⟶ 41:
:<math>T = \begin{bmatrix} Q_{1} & \\ & Q_{2} \end{bmatrix} \left( \begin{bmatrix} D_{1} & \\ & D_{2} \end{bmatrix} + \beta z z^{T} \right) \begin{bmatrix} Q_{1}^{T} & \\ & Q_{2}^{T} \end{bmatrix}</math>
The remaining task has been reduced to finding the eigenvalues of a diagonal matrix plus a rank-one correction. Before showing how to do this, let us simplify the notation. We are looking for the eigenvalues of the matrix <math>D + w w^{T}</math>, where <math>D</math> is diagonal with distinct entries and <math>w</math> is any vector with nonzero entries. In this case <math>w = \sqrt{|\beta|}\cdot z</math>.
The case of a zero entry is simple, since if w<sub>i</sub> is zero, (<math>e_i</math>,d<sub>i</sub>) is an eigenpair (<math>e_i</math> is in the standard basis) of <math>D + w w^{T}</math> since
<math>(D + w w^{T})e_i = De_i = d_i e_i</math>.
If <math>\lambda</math> is an eigenvalue, we have:
Line 44 ⟶ 52:
:<math>q + (D - \lambda I)^{-1} w(w^{T}q) = 0</math>
:<math>w^{T}q + w^{T}(D - \lambda I)^{-1} w(w^{T}q) = 0</math>
Keep in mind that <math>w^{T}q</math> is a nonzero scalar. Neither <math>w</math> nor <math>q</math> are zero. If <math>w^{T}q</math> were to be zero, <math>q</math> would be an eigenvector of <math>D</math> by <math>(D + w w^{T})q = \lambda q</math>. If that were the case, <math>q</math> would contain only one nonzero position since <math>D</math> is distinct diagonal and thus the inner product <math>w^{T}q</math> can not be zero after all. Therefore, we have:
:<math>1 + w^{T}(D - \lambda I)^{-1} w = 0</math>
or written as a scalar equation,
Line 50 ⟶ 58:
This equation is known as the ''secular equation''. The problem has therefore been reduced to finding the roots of the [[rational function]] defined by the left-hand side of this equation.
All general eigenvalue algorithms must be iterative,{{Citation needed|date=April 2024}} and the divide-and-conquer algorithm is no different. Solving the [[nonlinear]] secular equation requires an iterative technique, such as the [[Newton's method|Newton–Raphson method]]. However, each root can be found in [[Big O notation|O]](1) iterations, each of which requires <math>\Theta(m)</math> flops (for an <math>m</math>-degree rational function), making the cost of the iterative part of this algorithm <math>\Theta(m^{2})</math>.
==Analysis==
:<math>T(m) = 2 \times T\left(\frac{m}{2}\right) + \Theta(m^{2})</math>
In the notation of the Master theorem, <math>a = b = 2</math> and thus <math>\log_{b} a = 1</math>. Clearly, <math>\Theta(m^{2}) = \Omega(m^{1})</math>, so we have
:<math>T(m) = \Theta(m^{2})</math>
The advantage of divide-and-conquer comes when eigenvectors are needed as well. If this is the case, reduction to tridiagonal form takes <math>\frac{8}{3}m^{3}</math>, but the second part of the algorithm takes <math>\Theta(m^{3})</math> as well. For the QR algorithm with a reasonable target precision, this is <math>\approx
Practical use of the divide-and-conquer algorithm has shown that in most realistic eigenvalue problems, the algorithm actually does better than this. The reason is that very often the matrices <math>Q</math> and the vectors <math>z</math> tend to be ''numerically sparse'', meaning that they have many entries with values smaller than the [[floating point]] precision, allowing for ''numerical deflation'', i.e. breaking the problem into uncoupled subproblems.
Line 67 ⟶ 75:
==Variants and implementation==
The algorithm presented here is the simplest version. In many practical implementations, more complicated rank-1 corrections are used to guarantee stability; some variants even use rank-2 corrections.{{Citation needed|date=September 2011}}
There exist specialized root-finding techniques for rational functions that may do better than the Newton-Raphson method in terms of both performance and stability. These can be used to improve the iterative part of the divide-and-conquer algorithm.
The divide-and-conquer algorithm is readily [[Parallel algorithm|parallelized]], and [[linear algebra]] computing packages such as [[LAPACK]] contain high-quality parallel implementations.{{Citation needed|date=September 2023}}
==References==
*{{citation
| last = Demmel | first = James W. | authorlink = James Demmel
| mr = 1463942
| isbn = 0-89871-389-7
| ___location = Philadelphia, PA
| publisher = [[Society for Industrial and Applied Mathematics]]
| title = Applied Numerical Linear Algebra
| year = 1997}}.
* {{cite journal |first1=J.J.M. |last1=Cuppen |title=A Divide and Conquer Method for the Symmetric Tridiagonal Eigenproblem |journal=[[Numerische Mathematik]] |volume=36 |pages=177–195 |date=1981 |issue=2 |doi=10.1007/BF01396757 |s2cid=120504744 }}
{{Numerical linear algebra}}
[[Category:Numerical linear algebra]]
[[Category:
|