OpenMD 3.0
Molecular Dynamics in the Open
Loading...
Searching...
No Matches
JAMA::Eigenvalue< Real > Class Template Reference

Computes eigenvalues and eigenvectors of a real (non-complex) matrix. More...

#include <Eigenvalue.hpp>

Public Member Functions

 Eigenvalue (const DynamicRectMatrix< Real > &A)
 Check for symmetry, then construct the eigenvalue decomposition.
 
void getV (DynamicRectMatrix< Real > &V_)
 Return the eigenvector matrix.
 
void getRealEigenvalues (DynamicVector< Real > &d_)
 Return the real parts of the eigenvalues.
 
void getImagEigenvalues (DynamicVector< Real > &e_)
 Return the imaginary parts of the eigenvalues in parameter e_.
 
void getD (DynamicRectMatrix< Real > &D)
 

Detailed Description

template<class Real>
class JAMA::Eigenvalue< Real >

Computes eigenvalues and eigenvectors of a real (non-complex) matrix.

If A is symmetric, then A = V*D*V' where the eigenvalue matrix D is diagonal and the eigenvector matrix V is orthogonal. That is, the diagonal values of D are the eigenvalues, and V*V' = I, where I is the identity matrix. The columns of V represent the eigenvectors in the sense that A*V = V*D.

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.

The matrix V may be badly conditioned, or even singular, so the validity of the equation A = V*D*inverse(V) depends upon the condition number of V.

(Adapted from JAMA, a Java Matrix Library, developed by jointly by the Mathworks and NIST; see http://math.nist.gov/javanumerics/jama).

Definition at line 65 of file Eigenvalue.hpp.

Constructor & Destructor Documentation

◆ Eigenvalue()

template<class Real >
JAMA::Eigenvalue< Real >::Eigenvalue ( const DynamicRectMatrix< Real > & A)
inline

Check for symmetry, then construct the eigenvalue decomposition.

Parameters
ASquare real (non-complex) matrix

Definition at line 847 of file Eigenvalue.hpp.

Member Function Documentation

◆ getD()

template<class Real >
void JAMA::Eigenvalue< Real >::getD ( DynamicRectMatrix< Real > & D)
inline
    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.

@param D: upon return, the matrix is filled with the block diagonal
eigenvalue matrix.

Definition at line 951 of file Eigenvalue.hpp.

◆ getImagEigenvalues()

template<class Real >
void JAMA::Eigenvalue< Real >::getImagEigenvalues ( DynamicVector< Real > & e_)
inline

Return the imaginary parts of the eigenvalues in parameter e_.

Parameters
e_new matrix with imaginary parts of the eigenvalues.

Definition at line 913 of file Eigenvalue.hpp.

◆ getRealEigenvalues()

template<class Real >
void JAMA::Eigenvalue< Real >::getRealEigenvalues ( DynamicVector< Real > & d_)
inline

Return the real parts of the eigenvalues.

Returns
real(diag(D))

Definition at line 902 of file Eigenvalue.hpp.

◆ getV()

template<class Real >
void JAMA::Eigenvalue< Real >::getV ( DynamicRectMatrix< Real > & V_)
inline

Return the eigenvector matrix.

Returns
V

Definition at line 894 of file Eigenvalue.hpp.


The documentation for this class was generated from the following file: