33 #ifndef EIGEN_JACOBISVD_MKL_H 34 #define EIGEN_JACOBISVD_MKL_H 42 #define EIGEN_MKL_SVD(EIGTYPE, MKLTYPE, MKLRTYPE, MKLPREFIX, EIGCOLROW, MKLCOLROW) \ 44 JacobiSVD<Matrix<EIGTYPE, Dynamic, Dynamic, EIGCOLROW, Dynamic, Dynamic>, ColPivHouseholderQRPreconditioner>& \ 45 JacobiSVD<Matrix<EIGTYPE, Dynamic, Dynamic, EIGCOLROW, Dynamic, Dynamic>, ColPivHouseholderQRPreconditioner>::compute(const Matrix<EIGTYPE, Dynamic, Dynamic, EIGCOLROW, Dynamic, Dynamic>& matrix, unsigned int computationOptions) \ 47 typedef Matrix<EIGTYPE, Dynamic, Dynamic, EIGCOLROW, Dynamic, Dynamic> MatrixType; \ 48 typedef MatrixType::Scalar Scalar; \ 49 typedef MatrixType::RealScalar RealScalar; \ 50 allocate(matrix.rows(), matrix.cols(), computationOptions); \ 53 m_nonzeroSingularValues = m_diagSize; \ 55 lapack_int lda = matrix.outerStride(), ldu, ldvt; \ 56 lapack_int matrix_order = MKLCOLROW; \ 58 MKLTYPE *u, *vt, dummy; \ 59 jobu = (m_computeFullU) ? 'A' : (m_computeThinU) ? 'S' : 'N'; \ 60 jobvt = (m_computeFullV) ? 'A' : (m_computeThinV) ? 'S' : 'N'; \ 62 ldu = m_matrixU.outerStride(); \ 63 u = (MKLTYPE*)m_matrixU.data(); \ 64 } else { ldu=1; u=&dummy; }\ 66 ldvt = (m_computeFullV) ? m_cols : (m_computeThinV) ? m_diagSize : 1; \ 68 localV.resize(ldvt, m_cols); \ 69 vt = (MKLTYPE*)localV.data(); \ 70 } else { ldvt=1; vt=&dummy; }\ 71 Matrix<MKLRTYPE, Dynamic, Dynamic> superb; superb.resize(m_diagSize, 1); \ 72 MatrixType m_temp; m_temp = matrix; \ 73 LAPACKE_##MKLPREFIX##gesvd( matrix_order, jobu, jobvt, m_rows, m_cols, (MKLTYPE*)m_temp.data(), lda, (MKLRTYPE*)m_singularValues.data(), u, ldu, vt, ldvt, superb.data()); \ 74 if (computeV()) m_matrixV = localV.adjoint(); \ 76 m_isInitialized = true; \ 82 EIGEN_MKL_SVD(dcomplex, MKL_Complex16,
double, z, ColMajor, LAPACK_COL_MAJOR)
83 EIGEN_MKL_SVD(scomplex, MKL_Complex8,
float , c, ColMajor, LAPACK_COL_MAJOR)
86 EIGEN_MKL_SVD(
float,
float,
float , s, RowMajor, LAPACK_ROW_MAJOR)
87 EIGEN_MKL_SVD(dcomplex, MKL_Complex16,
double, z, RowMajor, LAPACK_ROW_MAJOR)
88 EIGEN_MKL_SVD(scomplex, MKL_Complex8,
float , c, RowMajor, LAPACK_ROW_MAJOR)
92 #endif // EIGEN_JACOBISVD_MKL_H
iterative scaling algorithm to equilibrate rows and column norms in matrices
#define EIGEN_MKL_SVD(EIGTYPE, MKLTYPE, MKLRTYPE, MKLPREFIX, EIGCOLROW, MKLCOLROW)