aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2010-04-13 10:40:55 +0200
committerGravatar Gael Guennebaud <g.gael@free.fr>2010-04-13 10:40:55 +0200
commita2324d626524852851e8b4b35c504bbdbc1a648e (patch)
tree04152be0ecb167e1f49f6c6d4113547fac62a8ca
parent614fbe497d139ddb8242070d0c44c2356ec7c7a5 (diff)
fix sparse squared norm
-rw-r--r--Eigen/src/Sparse/SparseDot.h8
-rw-r--r--test/sparse_vector.cpp4
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()