Rogue Wave banner
Previous fileTop of DocumentContentsIndex pageNext file
Linear Algebra Module Reference Guide
Rogue Wave web site:  Home Page  |  Main Documentation Page

RWSchurDecomp<T>

Module:  Linear Algebra   Group:  Nonsymmetric Eigenvalue Decomposition classes


Does not inherit

Local Index

Members

Synopsis

#include <rw/lapack/schur.h>

RWSchurDecomp<double> 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 class RWSchurDecomp<T> encapsulates 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 RWBalanceTransform<T>). 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

RWSchurDecomp();
RWSchurDecomp(const RWGenMat<T>& A,
     bool permute=true, bool scale=true);
RWSchurDecomp(const RWBalanceDecomp<T>& A);
RWSchurDecomp(const RWHessenbergDecomp<T>& A);

Public Member Functions

RWGenMat<T>
B() const;
RWMathVec<T>
Bx(const RWMathVec<T>& x);
RWMathVec<T>
BInvTx(const RWMathVec<T>& x);
RWGenMat<T>
BX(const RWGenMat<T>& X);
RWGenMat<T>
BInvTX(const RWGenMat<T>& X);
unsigned
cols();
DComplex
eigenValue(int i) const;
RWMathVec<DComplex>
eigenValues() const;
void
factor(const RWGenMat<T>& A,
bool permute=true, bool scale=true);
void
factor(const RWHessenbergDecomp<T>& A);
void
factor(const RWBalanceDecomp<T>& A);
bool
good();
int
move(int i, int j);
bool
moveToFront(const RWMathVec<int>&);
unsigned
rows();
RWGenMat<T>
Z() const;
RWMathVec<T>
Zx(const RWMathVec<T>& x);
RWMathVec<T>
ZTx(const RWMathVec<T>& x);
RWGenMat<T>
ZX(const RWGenMat<T>& X);
RWGenMat<T> 
ZTX(const RWGenMat<T>& X);


Previous fileTop of DocumentContentsIndex pageNext file

© Copyright Rogue Wave Software, Inc. All Rights Reserved.
Rogue Wave and SourcePro are registered trademarks of Rogue Wave Software, Inc. in the United States and other countries. All other trademarks are the property of their respective owners.
Contact Rogue Wave about documentation or support issues.