Navigation

Operators and Keywords

Function List:

C++ API

: S = schur (A)
: S = schur (A, "real")
: S = schur (A, "complex")
: S = schur (A, opt)
: [U, S] = schur (…)

Compute the Schur decomposition of A.

The Schur decomposition is defined as

S = U' * A * U

where U is a unitary matrix (U'* U is identity) and S is upper triangular. The eigenvalues of A (and S) are the diagonal elements of S. If the matrix A is real, then the real Schur decomposition is computed, in which the matrix U is orthogonal and S is block upper triangular with blocks of size at most 2 x 2 along the diagonal. The diagonal elements of S (or the eigenvalues of the 2 x 2 blocks, when appropriate) are the eigenvalues of A and S.

The default for real matrices is a real Schur decomposition. A complex decomposition may be forced by passing the flag "complex".

The eigenvalues are optionally ordered along the diagonal according to the value of opt. opt = "a" indicates that all eigenvalues with negative real parts should be moved to the leading block of S (used in are), opt = "d" indicates that all eigenvalues with magnitude less than one should be moved to the leading block of S (used in dare), and opt = "u", the default, indicates that no ordering of eigenvalues should occur. The leading k columns of U always span the A-invariant subspace corresponding to the k leading eigenvalues of S.

The Schur decomposition is used to compute eigenvalues of a square matrix, and has applications in the solution of algebraic Riccati equations in control (see are and dare).

See also: rsf2csf, ordschur, lu, chol, hess, qr, qz, svd.

Package: octave