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 .