yields the Schur decomposition for a numerical matrix m, given as a list {q,t} where q is an orthonormal matrix and t is a block uppertriangular matrix.


gives the generalized Schur decomposition of m with respect to a.

Details and Options


open allclose all

Basic Examples  (1)

Find the Schur decomposition of a real matrix:

Confirm the decomposition up to numerical rounding:

Format and :

Scope  (12)

Basic Uses  (5)

Find the Schur decomposition of a machine-precision matrix:

Format the results:

Schur decomposition of a complex matrix:

Schur decomposition of an arbitrary-precision matrix:

Consider a real-valued matrix with complex eigenvalues:

Compute its Schur decomposition:

All entries in the decomposition are real:

The matrix is block-upper triangular, with entries along the first subdiagonal, but not upper triangular:

RealBlockDiagonalFormFalse makes upper triangular at the cost of complex entries:

The Schur decomposition of large numerical matrices is computed efficiently:

Generalized Decomposition  (3)

Generalized Schur decomposition for a pair of matrices m and a:

Confirm that m=q.s.TemplateBox[{p}, ConjugateTranspose]:

Confirm that a=q.t.TemplateBox[{p}, ConjugateTranspose]:

Generalized Schur decomposition for a pair of complex matrices:

Confirm the decompositions:

Generalized Schur decomposition for a pair of arbitrary-precision matrices:

There is no need to use Chop to verify the decomposition:

Special Matrices  (4)

Schur decomposition of sparse matrices:

Schur decomposition of a structured matrix of type SymmetrizedArray:

IdentityMatrix has a trivial Schur decomposition:

Schur decomposition of HilbertMatrix:

Options  (2)

Pivoting  (1)

m is a 3×3 matrix:

With Pivoting->True, an extra matrix that represents the scaling and permutation is returned:

Verify that m.d is equal to d.q.t.ConjugateTranspose[q]:

RealBlockDiagonalForm  (1)

m is a matrix with two real and two complex eigenvalues:

With RealBlockDiagonalForm->False, the result is complex upper triangular:

With RealBlockDiagonalForm->True, there are real 2×2 blocks along the diagonal:

Applications  (1)

m is a matrix that is not diagonalizable:

The Schur decomposition gives equivalence to a triangular matrix:

The eigenvalues, since they are real, occur on the diagonal of t:

Properties & Relations  (10)

SchurDecomposition[m] gives matrices and such that m=q.t.TemplateBox[{q}, ConjugateTranspose]:

In {q,t}=SchurDecomposition[m], q is always a unitary matrix:

If m is real-valued, q is also orthogonal:

In {q,t}=SchurDecomposition[m], t is upper triangular with respect to the first subdiagonal:

t need not be strictly upper triangular:

If the matrix m has complex entries, the t matrix is always strictly upper triangular:

The diagonal entries of t are the eigenvalues of m:

For a real-valued matrix m, the real eigenvalues appear on t's diagonal, the complex ones as 2×2 blocks:

For a real-valued matrix , complex eigenvalues produce 2×2 blocks of the form in the matrix:

The corresponding complex eigenvalues can be recovered from the entries of the block as :

m and a are random 3×3 matrices:

Find the generalized Schur decomposition of m with respect to a:

Verify that m is given by q.s.ConjugateTranspose[p]:

Verify that a is given by q.t.ConjugateTranspose[p]:

In {q,s,p,t}=SchurDecomposition[{m,a},RealBlockDiagonalFormFalse], the ratio of the diagonals of s and t equals the generalized eigenvalues of m with respect to a:

For a real symmetric matrix m, the Schur decomposition is composed of eigenvalues and eigenvectors:

t is a diagonal matrix with the eigenvalues of m along the diagonal:

The columns of q are the eigenvectors of m:

SchurDecomposition[n,RealBlockDiagonalFormFalse] for a numerical normal matrix n:

Up to phase, this coincides with the Jordan decomposition:

The t and j matrices are equal:

To verify that q has eigenvectors as columns, set the first entry of each column to 1. to eliminate phase differences between q and s:

Possible Issues  (1)

SchurDecomposition only works with approximate numerical matrices:

For exact matrices, numericize the entries first:

Alternatively, use JordanDecomposition:

Wolfram Research (1991), SchurDecomposition, Wolfram Language function, (updated 2008).


Wolfram Research (1991), SchurDecomposition, Wolfram Language function, (updated 2008).


Wolfram Language. 1991. "SchurDecomposition." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2008.


Wolfram Language. (1991). SchurDecomposition. Wolfram Language & System Documentation Center. Retrieved from


@misc{reference.wolfram_2021_schurdecomposition, author="Wolfram Research", title="{SchurDecomposition}", year="2008", howpublished="\url{}", note=[Accessed: 26-January-2022 ]}


@online{reference.wolfram_2021_schurdecomposition, organization={Wolfram Research}, title={SchurDecomposition}, year={2008}, url={}, note=[Accessed: 26-January-2022 ]}