Learn R Programming

Matrix (version 0.999375-42)

Schur: Schur Decomposition of a Matrix

Description

Computes the Schur decomposition and eigenvalues of a square matrix; see the BACKGROUND information below.

Usage

Schur(x, vectors, ...)

Arguments

x
numeric (or complex, in future) square Matrix (inheriting from class "Matrix"). Missing values (NAs) are not allowed.
vectors
logical. When TRUE (the default), the Schur vectors are computed, and the result is a proper MatrixFactorization of class Schur.
...
further arguments passed to or from other methods.

Value

  • If vectors are TRUE, as per default, an object of class Schur.

    If vectors are FALSE, a list with components

  • Tthe upper quasi-triangular (square) matrix of the Schur decomposition.
  • EValuesthe vector of numeric or complex eigen values of $T$ or $A$.

BACKGROUND

If A is a square matrix, then A = Q T t(Q), where Q is orthogonal, and T is upper block-triangular (nearly triangular with either 1 by 1 or 2 by 2 blocks on the diagonal) where the 2 by 2 blocks correspond to (non-real) complex eigenvalues. The eigenvalues of A are the same as those of T, which are easy to compute. The Schur form is used most often for computing non-symmetric eigenvalue decompositions, and for computing functions of matrices such as matrix exponentials.

Details

Based on the Lapack subroutine dgees.

References

Anderson, E., et al. (1994). LAPACK User's Guide, 2nd edition, SIAM, Philadelphia.

Examples

Run this code
Schur(Hilbert(9))              # Schur factorization (real eigenvalues)

(A <- Matrix(round(rnorm(5*5, sd = 100)), nrow = 5))
(Sch.A <- Schur(A))

eTA <- eigen(Sch.A@T)
str(SchA <- Schur(A, vectors=FALSE))# no 'T' ==> simple list
stopifnot(all.equal(eTA$values, eigen(A)$values, tol = 1e-13),
          all.equal(eTA$values,
                    local({z <- Sch.A@EValues
                           z[order(Mod(z), decreasing=TRUE)]}), tol = 1e-13),
          identical(SchA$T, Sch.A@T),
          identical(SchA$EValues, Sch.A@EValues))

Run the code above in your browser using DataLab