diff options
author | 2010-04-13 10:40:55 +0200 | |
---|---|---|
committer | 2010-04-13 10:40:55 +0200 | |
commit | a2324d626524852851e8b4b35c504bbdbc1a648e (patch) | |
tree | 04152be0ecb167e1f49f6c6d4113547fac62a8ca | |
parent | 614fbe497d139ddb8242070d0c44c2356ec7c7a5 (diff) |
fix sparse squared norm
-rw-r--r-- | Eigen/src/Sparse/SparseDot.h | 8 | ||||
-rw-r--r-- | test/sparse_vector.cpp | 4 |
2 files changed, 7 insertions, 5 deletions
diff --git a/Eigen/src/Sparse/SparseDot.h b/Eigen/src/Sparse/SparseDot.h index 2baf09b0e..769bf8832 100644 --- a/Eigen/src/Sparse/SparseDot.h +++ b/Eigen/src/Sparse/SparseDot.h @@ -38,7 +38,7 @@ SparseMatrixBase<Derived>::dot(const MatrixBase<OtherDerived>& other) const ei_assert(size() == other.size()); ei_assert(other.size()>0 && "you are using a non initialized vector"); - + typename Derived::InnerIterator i(derived(),0); Scalar res = 0; while (i) @@ -59,9 +59,9 @@ SparseMatrixBase<Derived>::dot(const SparseMatrixBase<OtherDerived>& other) cons EIGEN_STATIC_ASSERT_SAME_VECTOR_SIZE(Derived,OtherDerived) EIGEN_STATIC_ASSERT((ei_is_same_type<Scalar, typename OtherDerived::Scalar>::ret), YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY) - + ei_assert(size() == other.size()); - + typename Derived::InnerIterator i(derived(),0); typename OtherDerived::InnerIterator j(other.derived(),0); Scalar res = 0; @@ -84,7 +84,7 @@ template<typename Derived> inline typename NumTraits<typename ei_traits<Derived>::Scalar>::Real SparseMatrixBase<Derived>::squaredNorm() const { - return ei_real((*this).cwise().abs2().sum()); + return ei_real((*this).cwiseAbs2().sum()); } template<typename Derived> diff --git a/test/sparse_vector.cpp b/test/sparse_vector.cpp index 5c6dadc00..a5101398c 100644 --- a/test/sparse_vector.cpp +++ b/test/sparse_vector.cpp @@ -79,13 +79,15 @@ template<typename Scalar> void sparse_vector(int rows, int cols) VERIFY_IS_APPROX(v1*=s1, refV1*=s1); VERIFY_IS_APPROX(v1/=s1, refV1/=s1); - + VERIFY_IS_APPROX(v1+=v2, refV1+=refV2); VERIFY_IS_APPROX(v1-=v2, refV1-=refV2); VERIFY_IS_APPROX(v1.dot(v2), refV1.dot(refV2)); VERIFY_IS_APPROX(v1.dot(refV2), refV1.dot(refV2)); + VERIFY_IS_APPROX(v1.squaredNorm(), refV1.squaredNorm()); + } void test_sparse_vector() |