library: libMatrix #include "TMatrixDEigen.h"

# TMatrixDEigen

class description - source file - inheritance tree (.pdf)

## class TMatrixDEigen

| Inheritance Chart:
`TMatrixDEigen` |

        protected:

          static void MakeHessenBerg(TMatrixD& v, TVectorD& ortho, TMatrixD& H)
          static void MakeSchurr(TMatrixD& v, TVectorD& d, TVectorD& e, TMatrixD& H)
          static void Sort(TMatrixD& v, TVectorD& d, TVectorD& e)

        public:

                          TMatrixDEigen()
                          TMatrixDEigen(const TMatrixD& a)
                          TMatrixDEigen(const TMatrixDEigen& another)
                  virtual ~TMatrixDEigen()
           static TClass* Class()
           const TMatrixD GetEigenValues() const
          const TVectorD& GetEigenValuesIm() const
          const TVectorD& GetEigenValuesRe() const
          const TMatrixD& GetEigenVectors() const
          virtual TClass* IsA() const
           TMatrixDEigen& operator=(const TMatrixDEigen& source)
             virtual void ShowMembers(TMemberInspector& insp, char* parent)
             virtual void Streamer(TBuffer& b)
                     void StreamerNVirtual(TBuffer& b)

### Data Members

        protected:

          TMatrixD fEigenVectors   Eigen-vectors of matrix
          TVectorD fEigenValuesRe  Eigen-values
          TVectorD fEigenValuesIm  Eigen-values

        public:

          static const enum TMatrixDEigen:: kWorkMax

## Class Description

     TMatrixDEigen

     Eigenvalues and eigenvectors of a real matrix.

     If A is not symmetric, then the eigenvalue matrix D is block
     diagonal with the real eigenvalues in 1-by-1 blocks and any complex
     eigenvalues, a + i*b, in 2-by-2 blocks, [a, b; -b, a].  That is, if
     the complex eigenvalues look like

         u + iv     .        .          .      .    .
           .      u - iv     .          .      .    .
           .        .      a + ib       .      .    .
           .        .        .        a - ib   .    .
           .        .        .          .      x    .
           .        .        .          .      .    y

     then D looks like

           u        v        .          .      .    .
          -v        u        .          .      .    .
           .        .        a          b      .    .
           .        .       -b          a      .    .
           .        .        .          .      x    .
           .        .        .          .      .    y

     This keeps V a real matrix in both symmetric and non-symmetric
     cases, and A*V = V*D.

TMatrixDEigen(const TMatrixD &a)

TMatrixDEigen(const TMatrixDEigen &another)

void MakeHessenBerg(TMatrixD &v,TVectorD &ortho,TMatrixD &H)

     Nonsymmetric reduction to Hessenberg form.
     This is derived from the Algol procedures orthes and ortran, by Martin and Wilkinson,
     Handbook for Auto. Comp., Vol.ii-Linear Algebra, and the corresponding
     Fortran subroutines in EISPACK.

void MakeSchurr(TMatrixD &v,TVectorD &d,TVectorD &e,TMatrixD &H)

     Nonsymmetric reduction from Hessenberg to real Schur form.
     This is derived from the Algol procedure hqr2, by Martin and Wilkinson,
     Handbook for Auto. Comp., Vol.ii-Linear Algebra, and the corresponding
     Fortran subroutine in EISPACK.

void Sort(TMatrixD &v,TVectorD &d,TVectorD &e)

     Sort eigenvalues and corresponding vectors in descending order of Re^2+Im^2
     of the complex eigenvalues .

const TMatrixD GetEigenValues() const

     Computes the block diagonal eigenvalue matrix.
     If the original matrix A is not symmetric, then the eigenvalue
     matrix D is block diagonal with the real eigenvalues in 1-by-1
     blocks and any complex eigenvalues,
        a + i*b, in 2-by-2 blocks, [a, b; -b, a].
      That is, if the complex eigenvalues look like

         u + iv     .        .          .      .    .
           .      u - iv     .          .      .    .
           .        .      a + ib       .      .    .
           .        .        .        a - ib   .    .
           .        .        .          .      x    .
           .        .        .          .      .    y

     then D looks like

         u        v        .          .      .    .
        -v        u        .          .      .    .
         .        .        a          b      .    .
         .        .       -b          a      .    .
         .        .        .          .      x    .
         .        .        .          .      .    y

     This keeps V a real matrix in both symmetric and non-symmetric
     cases, and A*V = V*D.

     Indexing:
      If matrix A has the index/shape (rowLwb,rowUpb,rowLwb,rowUpb)
      each eigen-vector must have the shape (rowLwb,rowUpb) .
      For convinience, the column index of the eigen-vector matrix
      also runs from rowLwb to rowUpb so that the returned matrix
      has also index/shape (rowLwb,rowUpb,rowLwb,rowUpb) .

### Inline Functions

                       void ~TMatrixDEigen()
              TMatrixDEigen TMatrixDEigen(const TMatrixDEigen& another)
            const TMatrixD& GetEigenVectors() const
            const TVectorD& GetEigenValuesRe() const
            const TVectorD& GetEigenValuesIm() const
             TMatrixDEigen& operator=(const TMatrixDEigen& source)
                    TClass* Class()
                    TClass* IsA() const
                       void ShowMembers(TMemberInspector& insp, char* parent)
                       void Streamer(TBuffer& b)
                       void StreamerNVirtual(TBuffer& b)

Last update: root/matrix:$Name: $:$Id: TMatrixDEigen.cxx,v 1.10 2005/02/15 16:17:09 brun Exp $
Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *