LU: remove partial-pivoting path (moderately useful since it's does

not allow to easily get the rank), fix a bug (which could have been
triggered by matrices having coefficients of very different
magnitudes).
Part: add an assert to prevent hard to find bugs
Swap: update comments
This commit is contained in:
Benoit Jacob
2008-08-07 04:31:05 +00:00
parent 88bb2087c1
commit 58ba9ca72f
5 changed files with 73 additions and 68 deletions

View File

@@ -535,7 +535,7 @@ template<typename Derived> class MatrixBase
/////////// LU module ///////////
const LU<EvalType> lu(int pivoting) const;
const LU<EvalType> lu() const;
const EvalType inverse() const;
void computeInverse(EvalType *result) const;
Scalar determinant() const;

View File

@@ -179,6 +179,7 @@ struct ei_part_assignment_impl
}
else
{
ei_assert(Mode == Upper || Mode == Lower || Mode == StrictlyUpper || Mode == StrictlyLower);
if((Mode == Upper && row <= col)
|| (Mode == Lower && row >= col)
|| (Mode == StrictlyUpper && row < col)

View File

@@ -27,14 +27,9 @@
/** \class SwapWrapper
*
* \brief Expression which must be nested by value
* \internal
*
* \param ExpressionType the type of the object of which we are requiring nesting-by-value
*
* This class is the return type of MatrixBase::nestByValue()
* and most of the time this is the only way it is used.
*
* \sa MatrixBase::nestByValue()
* \brief Internal helper class for swapping two expressions
*/
template<typename ExpressionType>
struct ei_traits<SwapWrapper<ExpressionType> >
@@ -116,12 +111,10 @@ template<typename ExpressionType> class SwapWrapper
/** swaps *this with the expression \a other.
*
* \note \a other is only marked const because I couln't find another way
* to get g++ (4.2 and 4.3) to accept that template parameter resolution.
* The problem seems to be that when swapping expressions as in
* m.row(i).swap(m.row(j)); the Row object returned by row(j) is a temporary
* and g++ doesn't dare to pass it by non-constant reference.
* It gets const_cast'd of course. TODO: get rid of const here.
* \note \a other is only marked for internal reasons, but of course
* it gets const-casted. One reason is that one will often call swap
* on temporary objects (hence non-const references are forbidden).
* Another reason is that lazyAssign takes a const argument anyway.
*/
template<typename Derived>
template<typename OtherDerived>
@@ -131,3 +124,9 @@ void MatrixBase<Derived>::swap(const MatrixBase<OtherDerived>& other)
}
#endif // EIGEN_SWAP_H

View File

@@ -209,11 +209,6 @@ enum {
HasDirectAccess = DirectAccessBit
};
enum {
PartialPivoting,
CompletePivoting
};
const int FullyCoherentAccessPattern = 0x1;
const int InnerCoherentAccessPattern = 0x2 | FullyCoherentAccessPattern;
const int OuterCoherentAccessPattern = 0x4 | InnerCoherentAccessPattern;