|
OpenMD 3.1
Molecular Dynamics in the Open
|
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) |
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.
|
inline |
Check for symmetry, then construct the eigenvalue decomposition.
| A | Square real (non-complex) matrix |
Definition at line 847 of file Eigenvalue.hpp.
|
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.
|
inline |
Return the imaginary parts of the eigenvalues in parameter e_.
| e_ | new matrix with imaginary parts of the eigenvalues. |
Definition at line 913 of file Eigenvalue.hpp.
|
inline |
Return the real parts of the eigenvalues.
Definition at line 902 of file Eigenvalue.hpp.
|
inline |