mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-05-22 04:27:36 +08:00
Make better decision on PartialPivLU vs inverse(): We have specialized inverse() only for FIXED matrices.
This commit is contained in:
parent
e92fe88159
commit
21c2b4e327
@ -194,7 +194,7 @@ void MatrixPowerTriangular<MatrixType>::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<MatrixType>::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<MatrixType> A(m_A);
|
||||
res = A.solve(b);
|
||||
for (--pp; pp >= 1; --pp)
|
||||
|
@ -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<RealScalar,RowsAtCompileTime,1,ColMajor,MaxRowsAtCompileTime> RealArray;
|
||||
static const bool m_OKforLU = RowsAtCompileTime == Dynamic || RowsAtCompileTime > 4;
|
||||
|
||||
const MatrixType& m_A;
|
||||
const MatrixType m_Id;
|
||||
|
Loading…
x
Reference in New Issue
Block a user