A Schur decomposition of a matrix is a factorization
, where
is unitary and
is upper triangular. The diagonal entries of
are the eigenvalues of
, and they can be made to appear in any order by choosing
appropriately. The columns of
are called Schur vectors.
A subspace of
is an invariant subspace of
if
for all
. If we partition
and
conformably we can write
which gives , showing that the columns of
span an invariant subspace of
. Furthermore,
. The first column of
is an eigenvector of
corresponding to the eigenvalue
, but the other columns are not eigenvectors, in general. Eigenvectors can be computed by solving upper triangular systems involving
, where
is an eigenvalue.
Write , where
and
is strictly upper triangular. Taking Frobenius norms gives
, or
Hence is independent of the particular Schur decomposition and it provides a measure of the departure from normality. The matrix
is normal (that is,
) if and only if
. So a normal matrix is unitarily diagonalizable:
.
An important application of the Schur decomposition is to compute matrix functions. The relation shows that computing
reduces to computing a function of a triangular matrix. Matrix functions illustrate what Van Loan (1975) describes as “one of the most basic tenets of numerical algebra”, namely “anything that the Jordan decomposition can do, the Schur decomposition can do better!”. Indeed the Jordan canonical form is built on a possibly ill conditioned similarity transformation while the Schur decomposition employs a perfectly conditioned unitary similarity, and the full upper triangular factor of the Schur form can do most of what the Jordan form’s bidiagonal factor can do.
An upper quasi-triangular matrix is a block upper triangular matrix
whose diagonal blocks are either
or
. A real matrix
has a real Schur decomposition
in which in which all the factors are real,
is orthogonal, and
is upper quasi-triangular with any
diagonal blocks having complex conjugate eigenvalues. If
is normal then the
blocks
have the form
which has eigenvalues .
The Schur decomposition can be computed by the QR algorithm at a cost of about flops for
and
, or
flops for
only.
In MATLAB, the Schur decomposition is computed with the schur
function: the command [Q,T] = schur(A)
returns the real Schur form if is real and otherwise the complex Schur form. The complex Schur form for a real matrix can be obtained with
[Q,T] = schur(A,'complex')
. The rsf2csf
function converts the real Schur form to the complex Schur form. The= ordschur
function takes a Schur decomposition and modifies it so that the eigenvalues appear in a specified order along the diagonal of .
References
- Nicholas J. Higham, Functions of Matrices: Theory and Computation, Society for Industrial and Applied Mathematics, Philadelphia, PA, USA, 2008.
- C. F. Van Loan, A Study of the Matrix Exponential, Numerical Analysis Report No. 10, University of Manchester, UK, 1975.
Related Blog Posts
This article is part of the “What Is” series, available from https://nhigham.com/index-of-what-is-articles/ and in PDF form from the GitHub repository https://github.com/higham/what-is.