#ifndef EIGEN_H #define EIGEN_H /* * NICE-Core - efficient algebra and computer vision methods * - libbasicvector - A simple vector library * See file License for license information. */ #include "core/vector/ippwrapper.h" #include "core/vector/VectorT.h" #include "core/vector/MatrixT.h" #include "core/vector/RowMatrixT.h" #include namespace NICE { /** * Compute the eigenvector of the eigenvalue with largest absolute eigenvalue * of a symmetric matrix. * @param a symmetric matrix * @return resulting eigenvector * @note If the matrix is not symmetric, the result will just be nonsense. * (No exception or other error notification). */ template VectorT maxEigenVector(const MatrixT& a); /** * Calculate eigenvalues of a symmetric matrix. * @param A symmetric matrix * @param evals eigenvalue buffer * @return eigenvalues */ template VectorT *eigenvalues(const MatrixT &A, VectorT *evals=NULL); /** * Calculate eigenvalues of a symmetric matrix. * See \c eigenvalues(const MatrixT&, VectorT*) */ template VectorT *eigenvalues(const RowMatrixT &A, VectorT *evals=NULL); /** * Calculate eigenvectors and eigenvalues of a symmetric matrix. * Eigenvectors are columns of the parameter evecs. * A = evecs * diag(evals) * evecs^T * @param A symmetric matrix * @param evecs eigenvector matrix * @param evals vector of eigenvalues (decreasing order) */ template void eigenvectorvalues(const MatrixT &A, MatrixT &evecs, VectorT &evals); /** * Calculate eigenvectors and eigenvalues of a symmetric matrix. * See \c eigenvectorvalues(const MatrixT &A, MatrixT &evecs, VectorT &evals). */ template void eigenvectorvalues(const RowMatrixT &A, RowMatrixT &evecs, VectorT &evals); /* * Calculate Eigenvectors of a symmetric matrix. * @param A symmetric matrix * @param v start vector * @return eigenvector */ /* template VectorT *Arnoldi_MGS(const MatrixT &A, size_t nr, VectorT *v=NULL) int vsize=A.cols(); if(v==NULL) v=new VectorT(vsize,static_cast(1)); MatrixT Q(vsize,nr); VectorT q(Q,vsize,VectorBase::external); for(int k=0;k //#endif #endif // EIGEN_H