Bartels–Stewart algorithm
Bartels-Stewart Algorithm
In numerical linear algebra, the Bartels-Stewart algorithm is used to numerically solve the Sylvester matrix equation . Developed by R.H. Bartels and G.W. Stewart in 1971, it was the first numerically stable method that could by systematically applied to solve such equations. The algorithm works by using the Schur decompositions of and to transform into a triangular system that can then be solved using forward and back-substitutions. In 1979, G. Golub, C. Van Loan and S.Nash introduced an improved version of the algorithm, known as the Hessenberg-Schur algorithm. It remains the standard approach for solving Sylvester equations when is of small to moderate size.
The algorithm
Let , and assume that the eigenvalues of are distinct from the eigenvalues of . Then, the matrix has a unique solution. The Bartels-Stewart algorithm computes by applying the following steps:
1.Compute the Schur decompositions
,
.
The matrices and are block-upper triangular matrices, with square blocks of size no greater than .
2. Set .
3. Solve the simplified system , where . This can be done using forward substitution on the blocks. Specifically, one has that if , then
,
where is the th column of .
4. Set .
Computational cost
Using the QR algorithm, the Schur decompositions in step 1 requires approximately flops, so that the overall computational cost is .
The Hessenberg-Schur algorithm
The Hessenberg-Schur algorithm replaces the decomposition in step 1 with the decomposition , where is an upper-Hessenberg matrix and is block-upper triangular. This leads to a system of the form that can be solved using forward substitution. The advantage of this approach is that can be found using Householder reflections at a cost of flops, compared to the flops required to compute the Schur decomposition of .
Implementations and availability
Alternative approaches and related problems
For large systems, the cost of the Bartels-Stewart algorithm can be prohibitive. When and are sparse or structured, so that linear solves and matrix vector multiplies involving them are cheap, iterative algorithms can potentially perform better. These include projection-based methods, which use Krylov subspace iterations, methods based on the alternating-implicit direction (ADI) iteration, and hybridizations that involve both projection and ADI. Iterative methods can also be used to directly construct low rank approximations to when solving . This is important when, for instance, is too large to be stored in memory explicitly.