Wm4Eigen.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef WM4EIGEN_H
00018 #define WM4EIGEN_H
00019
00020 #include "Wm4FoundationLIB.h"
00021 #include "Wm4Matrix2.h"
00022 #include "Wm4Matrix3.h"
00023 #include "Wm4Matrix4.h"
00024 #include "Wm4GMatrix.h"
00025
00026 namespace Wm4
00027 {
00028
00029 template <class Real>
00030 class WM4_FOUNDATION_ITEM Eigen
00031 {
00032 public:
00033 Eigen (int iSize);
00034 Eigen (const Matrix2<Real>& rkM);
00035 Eigen (const Matrix3<Real>& rkM);
00036 Eigen (const GMatrix<Real>& rkM);
00037 ~Eigen ();
00038
00039
00040 Real& operator() (int iRow, int iCol);
00041 Eigen& operator= (const Matrix2<Real>& rkM);
00042 Eigen& operator= (const Matrix3<Real>& rkM);
00043 Eigen& operator= (const GMatrix<Real>& rkM);
00044
00045
00046
00047
00048 Real GetEigenvalue (int i) const;
00049 const Real* GetEigenvalues () const;
00050 void GetEigenvector (int i, Vector2<Real>& rkV) const;
00051 void GetEigenvector (int i, Vector3<Real>& rkV) const;
00052 GVector<Real> GetEigenvector (int i) const;
00053 const GMatrix<Real>& GetEigenvectors () const;
00054
00055
00056 void EigenStuff2 ();
00057 void EigenStuff3 ();
00058 void EigenStuffN ();
00059 void EigenStuff ();
00060
00061
00062 void DecrSortEigenStuff2 ();
00063 void DecrSortEigenStuff3 ();
00064 void DecrSortEigenStuffN ();
00065 void DecrSortEigenStuff ();
00066
00067
00068 void IncrSortEigenStuff2 ();
00069 void IncrSortEigenStuff3 ();
00070 void IncrSortEigenStuffN ();
00071 void IncrSortEigenStuff ();
00072
00073 private:
00074 int m_iSize;
00075 GMatrix<Real> m_kMat;
00076 Real* m_afDiag;
00077 Real* m_afSubd;
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092 bool m_bIsRotation;
00093 void GuaranteeRotation ();
00094
00095
00096 void Tridiagonal2 ();
00097 void Tridiagonal3 ();
00098 void TridiagonalN ();
00099
00100
00101 bool QLAlgorithm ();
00102
00103
00104 void DecreasingSort ();
00105
00106
00107 void IncreasingSort ();
00108 };
00109
00110 typedef Eigen<float> Eigenf;
00111 typedef Eigen<double> Eigend;
00112
00113 }
00114
00115 #endif