10#ifndef EIGEN_SPARSE_DOT_H
11#define EIGEN_SPARSE_DOT_H
14#include "./InternalHeaderCheck.h"
18template <
typename Derived>
19template <
typename OtherDerived>
20inline typename internal::traits<Derived>::Scalar SparseMatrixBase<Derived>::dot(
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);
48template <
typename Derived>
49template <
typename OtherDerived>
50inline typename internal::traits<Derived>::Scalar SparseMatrixBase<Derived>::dot(
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())
81template <
typename Derived>
84 return numext::real((*this).cwiseAbs2().sum());
87template <
typename Derived>
90 return sqrt(squaredNorm());
93template <
typename Derived>
96 return internal::blueNorm_impl(*
this);
Base class for all dense matrices, vectors, and expressions.
Definition MatrixBase.h:52
Base class of any sparse matrices or sparse expressions.
Definition SparseMatrixBase.h:30
Namespace containing all symbols from the Eigen library.
Definition B01_Experimental.dox:1
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_sqrt_op< typename Derived::Scalar >, const Derived > sqrt(const Eigen::ArrayBase< Derived > &x)
Holds information about the various numeric (i.e. scalar) types allowed by Eigen.
Definition NumTraits.h:232