10 #ifndef EIGEN_SPARSE_DOT_H
11 #define EIGEN_SPARSE_DOT_H
15 template<
typename Derived>
16 template<
typename OtherDerived>
17 typename internal::traits<Derived>::Scalar
18 SparseMatrixBase<Derived>::dot(
const MatrixBase<OtherDerived>& other)
const
20 EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
21 EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
22 EIGEN_STATIC_ASSERT_SAME_VECTOR_SIZE(Derived,OtherDerived)
23 EIGEN_STATIC_ASSERT((internal::is_same<Scalar, typename OtherDerived::Scalar>::value),
24 YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY)
26 eigen_assert(size() == other.size());
27 eigen_assert(other.size()>0 && "you are using a non initialized vector");
29 typename Derived::InnerIterator i(derived(),0);
33 res += numext::conj(i.value()) * other.coeff(i.index());
39 template<
typename Derived>
40 template<
typename OtherDerived>
41 typename internal::traits<Derived>::Scalar
42 SparseMatrixBase<Derived>::dot(
const SparseMatrixBase<OtherDerived>& other)
const
44 EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
45 EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
46 EIGEN_STATIC_ASSERT_SAME_VECTOR_SIZE(Derived,OtherDerived)
47 EIGEN_STATIC_ASSERT((internal::is_same<Scalar, typename OtherDerived::Scalar>::value),
48 YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY)
50 eigen_assert(size() == other.size());
52 typedef typename Derived::Nested Nested;
53 typedef typename OtherDerived::Nested OtherNested;
54 typedef typename internal::remove_all<Nested>::type NestedCleaned;
55 typedef typename internal::remove_all<OtherNested>::type OtherNestedCleaned;
57 Nested nthis(derived());
58 OtherNested nother(other.derived());
60 typename NestedCleaned::InnerIterator i(nthis,0);
61 typename OtherNestedCleaned::InnerIterator j(nother,0);
65 if (i.index()==j.index())
67 res += numext::conj(i.value()) * j.value();
70 else if (i.index()<j.index())
78 template<
typename Derived>
79 inline typename NumTraits<typename internal::traits<Derived>::Scalar>::Real
80 SparseMatrixBase<Derived>::squaredNorm()
const
82 return numext::real((*this).cwiseAbs2().sum());
85 template<
typename Derived>
86 inline typename NumTraits<typename internal::traits<Derived>::Scalar>::Real
87 SparseMatrixBase<Derived>::norm()
const
90 return sqrt(squaredNorm());
93 template<
typename Derived>
94 inline typename NumTraits<typename internal::traits<Derived>::Scalar>::Real
95 SparseMatrixBase<Derived>::blueNorm()
const
97 return internal::blueNorm_impl(*
this);
101 #endif // EIGEN_SPARSE_DOT_H