# SCHUR

## Purpose:

Computes the Schur decomposition of a square matrix.

## Syntax:

SCHUR(a)

(u, s) = SCHUR(a)

 a - A square matrix.

## Returns:

A matrix.

(u, s) = schur(matrix) returns the separate unit Schur and Schur components such that u *^ s *^ u' == a and u' *^ u == a.

## Example:

A = {{1, 3,  4},

{5, 6,  7},

{8, 9, 12}}

schur(A) == {{19.964, 4.353,   2.2431},

{ 0.0,  -1.4739, -0.1399},

{ 0.0,   0.0,     0.50976}}

uschur(A) == {{-0.25387, -0.96612, -0.046551},

{-0.50456,  0.17334, -0.84579},

{-0.82521,  0.19124,  0.53147}}

## Example:

A = {{1, 3,  4},

{5, 6,  7},

{8, 9, 12}}

(u, s) = schur(A)

u == {{-0.25387, -0.96612, -0.046551},

{-0.50456,  0.17334, -0.84579},

{-0.82521,  0.19124,  0.53147}}

s == {{19.964, 4.353,   2.2431},

{ 0.0,  -1.4739, -0.1399},

{ 0.0,   0.0,     0.50976}}

u *^ s *^ u' == {{1, 3,  4},

{5, 6,  7},

{8, 9, 12}}

## Remarks:

For matrix A, SCHUR and USCHUR produce matrixes such that:

A == (uschur(A) *^ schur(A)) *^ transpose(uschur(A))

If the matrix is real, SCHUR returns the real Schur form which has the real eigenvalues on the diagonal and the complex eigenvalues in 2-by-2 blocks on the diagonal.

If the matrix is complex, SCHUR returns the complex Schur form which is upper triangular with the eigenvalues of the matrix on the diagonal.

See DADiSP/MatrixXL to significantly optimize SCHUR.