10 #ifndef EIGEN_SPARSE_DOT_H 11 #define EIGEN_SPARSE_DOT_H 14 #include "./InternalHeaderCheck.h" 18 template <
typename Derived>
19 template <
typename OtherDerived>
20 inline typename internal::traits<Derived>::Scalar SparseMatrixBase<Derived>::dot(
21 const MatrixBase<OtherDerived>& other)
const {
22 EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
23 EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
24 EIGEN_STATIC_ASSERT_SAME_VECTOR_SIZE(Derived, OtherDerived)
26 (internal::is_same<Scalar, typename OtherDerived::Scalar>::value),
27 YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY)
29 eigen_assert(size() == other.size());
30 eigen_assert(other.size() > 0 &&
"you are using a non initialized vector");
32 internal::evaluator<Derived> thisEval(derived());
33 typename internal::evaluator<Derived>::InnerIterator i(thisEval, 0);
39 res1 = numext::madd<Scalar>(numext::conj(i.value()), other.coeff(i.index()), res1);
42 res2 = numext::madd<Scalar>(numext::conj(i.value()), other.coeff(i.index()), res2);
48 template <
typename Derived>
49 template <
typename OtherDerived>
50 inline typename internal::traits<Derived>::Scalar SparseMatrixBase<Derived>::dot(
51 const SparseMatrixBase<OtherDerived>& other)
const {
52 EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
53 EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
54 EIGEN_STATIC_ASSERT_SAME_VECTOR_SIZE(Derived, OtherDerived)
56 (internal::is_same<Scalar, typename OtherDerived::Scalar>::value),
57 YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY)
59 eigen_assert(size() == other.size());
61 internal::evaluator<Derived> thisEval(derived());
62 typename internal::evaluator<Derived>::InnerIterator i(thisEval, 0);
64 internal::evaluator<OtherDerived> otherEval(other.derived());
65 typename internal::evaluator<OtherDerived>::InnerIterator j(otherEval, 0);
69 if (i.index() == j.index()) {
70 res = numext::madd<Scalar>(numext::conj(i.value()), j.value(), res);
73 }
else if (i.index() < j.index())
81 template <
typename Derived>
82 inline typename NumTraits<typename internal::traits<Derived>::Scalar>::Real SparseMatrixBase<Derived>::squaredNorm()
84 return numext::real((*this).cwiseAbs2().sum());
87 template <
typename Derived>
88 inline typename NumTraits<typename internal::traits<Derived>::Scalar>::Real SparseMatrixBase<Derived>::norm()
const {
90 return sqrt(squaredNorm());
93 template <
typename Derived>
94 inline typename NumTraits<typename internal::traits<Derived>::Scalar>::Real SparseMatrixBase<Derived>::blueNorm()
96 return internal::blueNorm_impl(*
this);
100 #endif // EIGEN_SPARSE_DOT_H const Eigen::CwiseUnaryOp< Eigen::internal::scalar_sqrt_op< typename Derived::Scalar >, const Derived > sqrt(const Eigen::ArrayBase< Derived > &x)
Namespace containing all symbols from the Eigen library.
Definition: B01_Experimental.dox:1