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.