R: Schur Decomposition of a Matrix

Schur {Matrix} | R Documentation

## 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.

### Details

Based on the Lapack subroutine `dgees`.

### Value

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

If `vectors` are `FALSE`, a list with components

`T` | the upper quasi-triangular (square) matrix of the Schur decomposition.
`EValues` | the 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.

### References

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

### Examples

    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))

[Package Matrix version 1.0-6 Index]