# scipy.linalg.schur¶

scipy.linalg.schur(a, output='real', lwork=None, overwrite_a=False, sort=None)

Compute Schur decomposition of a matrix.

The Schur decomposition is

A = Z T Z^H

where Z is unitary and T is either upper-triangular, or for real Schur decomposition (output=’real’), quasi-upper triangular. In the quasi-triangular form, 2x2 blocks describing complex-valued eigenvalue pairs may extrude from the diagonal.

Parameters : a : array, shape (M, M) Matrix to decompose output : {‘real’, ‘complex’} Construct the real or complex Schur decomposition (for real matrices). lwork : integer Work array size. If None or -1, it is automatically computed. overwrite_a : boolean Whether to overwrite data in a (may improve performance) sort : {None, callable, ‘lhp’, ‘rhp’, ‘iuc’, ‘ouc’} Specifies whether the upper eigenvalues should be sorted. A callable may be passed that, given a eigenvalue, returns a boolean denoting whether the eigenvalue should be sorted to the top-left (True). Alternatively, string parameters may be used: ‘lhp’ Left-hand plane (x.real < 0.0) ‘rhp’ Right-hand plane (x.real > 0.0) ‘iuc’ Inside the unit circle (x*x.conjugate() <= 1.0) ‘ouc’ Outside the unit circle (x*x.conjugate() > 1.0) Defaults to None (no sorting). T : array, shape (M, M) Schur form of A. It is real-valued for the real Schur decomposition. Z : array, shape (M, M) An unitary Schur transformation matrix for A. It is real-valued for the real Schur decomposition. sdim : integer If and only if sorting was requested, a third return value will contain the number of eigenvalues satisfying the sort condition. LinAlgError : Error raised under three conditions: 1. The algorithm failed due to a failure of the QR algorithm to compute all eigenvalues If eigenvalue sorting was requested, the eigenvalues could not be reordered due to a failure to separate eigenvalues, usually because of poor conditioning If eigenvalue sorting was requested, roundoff errors caused the leading eigenvalues to no longer satisfy the sorting condition