diff --git a/unsupported/Eigen/src/MatrixFunctions/MatrixPower.h b/unsupported/Eigen/src/MatrixFunctions/MatrixPower.h index 2cb1d95d9..520f23bff 100644 --- a/unsupported/Eigen/src/MatrixFunctions/MatrixPower.h +++ b/unsupported/Eigen/src/MatrixFunctions/MatrixPower.h @@ -194,7 +194,7 @@ void MatrixPowerTriangular::computeIntPower(const Derived& b, Result else if (p>0) { m_tmp1 = m_T; } - else if (m_A.cols() > 2 && b.cols()*(pp-applyings) <= m_A.cols()*squarings) { + else if (m_OKforLU && b.cols()*(pp-applyings) <= m_A.cols()*squarings) { res = m_T.solve(b); for (--pp; pp >= 1; --pp) res = m_T.solve(res); @@ -424,7 +424,7 @@ void MatrixPower::computeIntPower(const Derived& b, ResultType& res, else if (p>0) { m_tmp1 = m_A; } - else if (m_A.cols() > 2 && b.cols()*(pp-applyings) <= m_A.cols()*squarings) { + else if (m_OKforLU && b.cols()*(pp-applyings) <= m_A.cols()*squarings) { PartialPivLU A(m_A); res = A.solve(b); for (--pp; pp >= 1; --pp) diff --git a/unsupported/Eigen/src/MatrixFunctions/MatrixPowerBase.h b/unsupported/Eigen/src/MatrixFunctions/MatrixPowerBase.h index aa28b821b..96846cb93 100644 --- a/unsupported/Eigen/src/MatrixFunctions/MatrixPowerBase.h +++ b/unsupported/Eigen/src/MatrixFunctions/MatrixPowerBase.h @@ -24,6 +24,7 @@ namespace Eigen { typedef typename Base::RealArray RealArray; #define EIGEN_MATRIX_POWER_PROTECTED_MEMBERS(Derived) \ + using Base::m_OKforLU; \ using Base::m_A; \ using Base::m_Id; \ using Base::m_tmp1; \ @@ -98,6 +99,7 @@ class MatrixPowerBase protected: typedef Array RealArray; + static const bool m_OKforLU = RowsAtCompileTime == Dynamic || RowsAtCompileTime > 4; const MatrixType& m_A; const MatrixType m_Id;