Rogue Wave banner
Previous fileTop of DocumentContentsIndexNext file

{type}SchurDecomp



Data Type and Member Function Indexes
(exclusive of constructors and destructors)

Synopsis

#include <rw/dschur.h>          // DoubleSchurDecomp
#include <rw/cschur.h>          // DComplexSchurDecomp

DoubleSchurDecomp schur(A);     // A is an RWGenMat<double>

Description

A Schur decomposition uses orthogonal transformations to reduce a matrix A to a matrix T that is upper quasitriangular. For a complex matrix, T is actually triangular. For a real matrix, T is triangular, except the diagonal can contain 2 x 2 blocks, allowing nonzero entries on the subdiagonal. The columns of the orthogonal transformation matrix, Z, are called Schur vectors.

The classes {TYPE}SchurDecomp encapsulate a Schur decomposition as well as an optional balance transformation. The decomposition of a matrix A is:

where Z is orthogonal, T is quasi-upper triangular, and B is a balance transformation (see {TYPE}BalanceTransform). The Schur decomposition yields eigenvalues immediately. Since the eigenvalues of A and T are the same, and since T is quasi-upper triangular, the eigenvalues are simply either the diagonal elements of T, or the complex conjugate pair corresponding to the eigenvalues of a 2 x 2 block on the diagonal. The invariant subspace corresponding to the first k eigenvalues of A is spanned by the first k Schur vectors; since the matrix of Schur vectors, Z, is orthogonal, this basis is orthonormal. Often, the Schur vectors are preferable to the eigenvectors themselves because of this orthogonality.

Example

Public Constructors

DoubleSchurDecomp();
DComplexSchurDecomp();
DoubleSchurDecomp(const RWGenMat<double>& A,
          RWBoolean permute=TRUE, RWBoolean scale=TRUE);
DComplexSchurDecomp(const RWGenMat<DComplex>& A,
          RWBoolean permute=TRUE, RWBoolean scale=TRUE);
DoubleSchurDecomp(const DoubleBalanceDecomp& A);
DComplexSchurDecomp(const DComplexBalanceDecomp& A);
DoubleSchurDecomp(const DoubleHessenbergDecomp& A);
DComplexSchurDecomp(const DComplexHessenbergDecomp& A);

Public Member Functions

RWGenMat<double>
DoubleSchurDecomp::B() const;
RWGenMat<DComplex>
DComplexSchurDecomp::B() const;
RWMathVec<double>
DoubleSchurDecomp::Bx(const RWMathVec<double>& x);
RWMathVec<double>
DoubleSchurDecomp::BInvTx(const RWMathVec<double>& x);
RWGenMat<double>
DoubleSchurDecomp::BX(const RWGenMat<double>& X);
RWGenMat<double>
DoubleSchurDecomp::BInvTX(const RWGenMat<double>& X);
RWMathVec<DComplex>
DComplexSchurDecomp::Bx(const RWMathVec<DComplex>& x);
RWMathVec<DComplex>
DComplexSchurDecomp::BInvTx(const RWMathVec<DComplex>& x);
RWGenMat<DComplex>
DComplexSchurDecomp::BX(const RWGenMat<DComplex>& X);
RWGenMat<DComplex>
DComplexSchurDecomp::BInvTX(const RWGenMat<DComplex>& X);
unsigned
DoubleSchurDecomp::cols();
unsigned
DComplexSchurDecomp::cols();
DComplex
DoubleSchurDecomp::eigenValue(int i) const;
DComplex
DComplexSchurDecomp::eigenValue(int i) const;
RWMathVec<DComplex>
DoubleSchurDecomp::eigenValues() const;
RWMathVec<DComplex>
DComplexSchurDecomp::eigenValues() const;
void
DoubleSchurDecomp::factor(const RWGenMat<double>& A,
RWBoolean permute=TRUE, RWBoolean scale=TRUE); void DComplexSchurDecomp::factor(const RWGenMat<DComplex>& A,
RWBoolean permute=TRUE, RWBoolean scale=TRUE);
void
DoubleSchurDecomp::factor(const DoubleHessenbergDecomp& A);
void
DComplexSchurDecomp::factor(const DComplexHessenbergDecomp& A);
void
DoubleSchurDecomp::factor(const DoubleBalanceDecomp& A);
void
DComplexSchurDecomp::factor(const DComplexBalanceDecomp& A);
RWBoolean
DoubleSchurDecomp::good();
RWBoolean
DComplexSchurDecomp::good();
int
DoubleSchurDecomp::move(int i, int j);
int
DComplexSchurDecomp::move(int i, int j);
RWBoolean
DoubleSchurDecomp::moveToFront(const RWMathVec<int>&);
RWBoolean
DComplexSchurDecomp::moveToFront(const RWMathVec<int>&);
unsigned
DoubleSchurDecomp::rows();
unsigned
DComplexSchurDecomp::rows();
RWGenMat<double>
DoubleSchurDecomp::Z() const;
RWGenMat<DComplex>
DComplexSchurDecomp::Z() const;
RWMathVec<double>
DoubleSchurDecomp::Zx(const RWMathVec<double>& x);
RWMathVec<double>
DoubleSchurDecomp::ZTx(const RWMathVec<double>& x);
RWGenMat<double>
DoubleSchurDecomp::ZX(const RWGenMat<double>& X);
RWGenMat<double> 
DoubleSchurDecomp::ZTX(const RWGenMat<double>& X);
RWMathVec<DComplex>
DComplexSchurDecomp::Zx(const RWMathVec<DComplex>& x);
RWMathVec<DComplex>
 DComplexSchurDecomp::ZTx(const RWMathVec<DComplex>& x);
RWGenMat<DComplex>
DComplexSchurDecomp::ZX(const RWGenMat<DComplex>& X);
RWGenMat<DComplex>
DComplexSchurDecomp::ZTX (const RWGenMat<DComplex>& X);


Previous fileTop of DocumentContentsIndexNext file

©Copyright 1999, Rogue Wave Software, Inc.
Send mail to report errors or comment on the documentation.