MTK++ Latest version: 0.2.0

diagonalize_eigen.h
Go to the documentation of this file.
00001 
00033 #ifndef DIAGONALIZEEIGEN_H
00034 #define DIAGONALIZEEIGEN_H
00035 
00036 // Eigen
00037 #include <Eigen/Dense>
00038 #include <Eigen/Eigenvalues>
00039 using namespace Eigen;
00040 
00041 namespace MTKpp
00042 {
00043 
00050 inline void eigenValueSort(MatrixXd& eigenvectors,
00051                            VectorXd& eigenvalues, int order) {
00052     int k;
00053     double p;
00054 //    int size = eigenvectors.size1();
00055     int size = eigenvectors.rows();
00056 
00057     // Ascending
00058     if (!order) {
00059       for (int i = 0; i < size-1 ; ++i) {
00060         k = i;
00061         p = eigenvalues(i);
00062 
00063         for (int j = i+1; j < size; ++j) {
00064           if (eigenvalues(j) < p) {
00065             k = j;
00066             p = eigenvalues(j);
00067           }
00068         }
00069         if ( k != i ) {
00070           eigenvalues(k) = eigenvalues(i);
00071           eigenvalues(i) = p;
00072           for (int m = 0; m < size; ++m) {
00073             p = eigenvectors(m,i);
00074             eigenvectors(m,i) = eigenvectors(m,k);
00075             eigenvectors(m,k) = p;
00076           }
00077         }
00078       }
00079     }
00080     // Descending
00081     else {
00082       for (int i = 0; i < size-1 ; ++i) {
00083         k = i;
00084         p = eigenvalues(i);
00085 
00086         for (int j = i+1; j < size; ++j) {
00087           if (eigenvalues(j) > p) {
00088             k = j;
00089             p = eigenvalues(j);
00090           }
00091         }
00092         if ( k != i ) {
00093           eigenvalues(k) = eigenvalues(i);
00094           eigenvalues(i) = p;
00095           for (int m = 0; m < size; ++m) {
00096             p = eigenvectors(m,i);
00097             eigenvectors(m,i) = eigenvectors(m,k);
00098             eigenvectors(m,k) = p;
00099           }
00100         }
00101       }
00102     }
00103 }
00104 
00105 } // MTKpp namespace
00106 
00107 #endif // DIAGONALIZEEIGEN_H

Generated on Fri Dec 23 2011 09:28:49 for MTK++ by Doxygen 1.7.5.1