33 #ifndef EIGEN_SAEIGENSOLVER_MKL_H 34 #define EIGEN_SAEIGENSOLVER_MKL_H 42 #define EIGEN_MKL_EIG_SELFADJ(EIGTYPE, MKLTYPE, MKLRTYPE, MKLNAME, EIGCOLROW, MKLCOLROW ) \ 44 SelfAdjointEigenSolver<Matrix<EIGTYPE, Dynamic, Dynamic, EIGCOLROW> >& \ 45 SelfAdjointEigenSolver<Matrix<EIGTYPE, Dynamic, Dynamic, EIGCOLROW> >::compute(const Matrix<EIGTYPE, Dynamic, Dynamic, EIGCOLROW>& matrix, int options) \ 47 eigen_assert(matrix.cols() == matrix.rows()); \ 48 eigen_assert((options&~(EigVecMask|GenEigMask))==0 \ 49 && (options&EigVecMask)!=EigVecMask \ 50 && "invalid option parameter"); \ 51 bool computeEigenvectors = (options&ComputeEigenvectors)==ComputeEigenvectors; \ 52 lapack_int n = matrix.cols(), lda, matrix_order, info; \ 53 m_eivalues.resize(n,1); \ 54 m_subdiag.resize(n-1); \ 59 m_eivalues.coeffRef(0,0) = numext::real(matrix.coeff(0,0)); \ 60 if(computeEigenvectors) m_eivec.setOnes(n,n); \ 62 m_isInitialized = true; \ 63 m_eigenvectorsOk = computeEigenvectors; \ 67 lda = matrix.outerStride(); \ 68 matrix_order=MKLCOLROW; \ 69 char jobz, uplo='L'; \ 70 jobz = computeEigenvectors ? 'V' : 'N'; \ 72 info = LAPACKE_##MKLNAME( matrix_order, jobz, uplo, n, (MKLTYPE*)m_eivec.data(), lda, (MKLRTYPE*)m_eivalues.data() ); \ 73 m_info = (info==0) ? Success : NoConvergence; \ 74 m_isInitialized = true; \ 75 m_eigenvectorsOk = computeEigenvectors; \ 92 #endif // EIGEN_SAEIGENSOLVER_H
#define EIGEN_MKL_EIG_SELFADJ(EIGTYPE, MKLTYPE, MKLRTYPE, MKLNAME, EIGCOLROW, MKLCOLROW)
iterative scaling algorithm to equilibrate rows and column norms in matrices