Schur-methods function

Methods for Schur Factorization

Methods for Schur Factorization

Computes the Schur factorization of an nbynn-by-n

real matrix AA, which has the general form [REMOVE_ME]A=QTQA=QTQ[REMOVEME2] A = Q T Q'A = Q * T * Q' [REMOVE_ME_2]

where QQ is an orthogonal matrix and TT is a block upper triangular matrix with 1by11-by-1 and 2by22-by-2 diagonal blocks specifying the real and complex conjugate eigenvalues of AA. The column vectors of QQ are the Schur vectors of AA, and TT is the Schur form of AA.

Methods are built on LAPACK routine dgees.

methods

Description

Computes the Schur factorization of an nbynn-by-n

real matrix AA, which has the general form

A=QTQA=QTQ A = Q T Q'A = Q * T * Q'

where QQ is an orthogonal matrix and TT is a block upper triangular matrix with 1by11-by-1 and 2by22-by-2 diagonal blocks specifying the real and complex conjugate eigenvalues of AA. The column vectors of QQ are the Schur vectors of AA, and TT is the Schur form of AA.

Methods are built on LAPACK routine dgees.

Schur(x, vectors = TRUE, ...)

Arguments

  • x: a finite square matrix or Matrix to be factorized.
  • vectors: a logical. If TRUE (the default), then Schur vectors are computed in addition to the Schur form.
  • ...: further arguments passed to or from methods.

Returns

An object representing the factorization, inheriting from virtual class SchurFactorization

if vectors = TRUE. Currently, the specific class is always Schur in that case.

An exception is if x is a traditional matrix, in which case the result is a named list containing Q, T, and EValues slots of the Schur object.

If vectors = FALSE, then the result is the same named list but without Q.

See Also

Class Schur and its methods.

Class dgeMatrix.

Generic functions expand1 and expand2, for constructing matrix factors from the result.

Generic functions Cholesky, BunchKaufman, lu, and qr, for computing other factorizations.

References

The LAPACK source code, including documentation; see https://netlib.org/lapack/double/dgees.f.

Golub, G. H., & Van Loan, C. F. (2013). Matrix computations (4th ed.). Johns Hopkins University Press. tools:::Rd_expr_doi("10.56021/9781421407944")

Examples

showMethods("Schur", inherited = FALSE) set.seed(0) Schur(Hilbert(9L)) # real eigenvalues (A <- Matrix(round(rnorm(25L, sd = 100)), 5L, 5L)) (sch.A <- Schur(A)) # complex eigenvalues ## A ~ Q T Q' in floating point str(e.sch.A <- expand2(sch.A), max.level = 2L) stopifnot(all.equal(A, Reduce(`%*%`, e.sch.A))) (e1 <- eigen(sch.A@T, only.values = TRUE)$values) (e2 <- eigen( A , only.values = TRUE)$values) (e3 <- sch.A@EValues) stopifnot(exprs = { all.equal(e1, e2, tolerance = 1e-13) all.equal(e1, e3[order(Mod(e3), decreasing = TRUE)], tolerance = 1e-13) identical(Schur(A, vectors = FALSE), list(T = sch.A@T, EValues = e3)) identical(Schur(as(A, "matrix")), list(Q = as(sch.A@Q, "matrix"), T = as(sch.A@T, "matrix"), EValues = e3)) })
  • Maintainer: Martin Maechler
  • License: GPL (>= 2) | file LICENCE
  • Last published: 2025-03-11