diff options
author | Gael Guennebaud <g.gael@free.fr> | 2008-04-26 18:26:05 +0000 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2008-04-26 18:26:05 +0000 |
commit | 4c92150676dea30748215549ba1b94df2624e652 (patch) | |
tree | ee382f99f565d46ac337162ac1943e6c15ee4757 /Eigen/src/LU/Determinant.h | |
parent | 62bf0bbd5911bde451ec87b9a0337d2912b9206b (diff) |
Added Triangular expression to extract upper or lower (strictly or not)
part of a matrix. Triangular also provide an optimised method for forward
and backward substitution. Further optimizations regarding assignments and
products might come later.
Updated determinant() to take into account triangular matrices.
Started the QR module with a QR decompostion algorithm.
Help needed to build a QR algorithm (eigen solver) based on it.
Diffstat (limited to 'Eigen/src/LU/Determinant.h')
-rw-r--r-- | Eigen/src/LU/Determinant.h | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/Eigen/src/LU/Determinant.h b/Eigen/src/LU/Determinant.h index d3998195c..1675efc10 100644 --- a/Eigen/src/LU/Determinant.h +++ b/Eigen/src/LU/Determinant.h @@ -71,7 +71,16 @@ template<typename Derived> typename ei_traits<Derived>::Scalar MatrixBase<Derived>::determinant() const { assert(rows() == cols()); - if(rows() <= 4) return ei_bruteforce_det(derived()); + if (Derived::Flags & (NullLowerBit | NullUpperBit)) + { + if (Derived::Flags & UnitDiagBit) + return 1; + else if (Derived::Flags & NullDiagBit) + return 0; + else + return derived().diagonal().redux(ei_scalar_product_op<Scalar>()); + } + else if(rows() <= 4) return ei_bruteforce_det(derived()); else assert(false); // unimplemented for now } |