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(
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::conj(i.value()) * other.coeff(i.index());
42 res2 += numext::conj(i.value()) * other.coeff(i.index());
48template <
typename Derived>
49template <
typename OtherDerived>
50inline 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::conj(i.value()) * j.value();
73 }
else if (i.index() < j.index())
81template <
typename Derived>
82inline typename NumTraits<typename internal::traits<Derived>::Scalar>::Real SparseMatrixBase<Derived>::squaredNorm()
84 return numext::real((*this).cwiseAbs2().sum());
87template <
typename Derived>
88inline typename NumTraits<typename internal::traits<Derived>::Scalar>::Real SparseMatrixBase<Derived>::norm()
const {
90 return sqrt(squaredNorm());
93template <
typename Derived>
94inline typename NumTraits<typename internal::traits<Derived>::Scalar>::Real SparseMatrixBase<Derived>::blueNorm()
96 return internal::blueNorm_impl(*
this);
Namespace containing all symbols from the Eigen library.
Definition Core:137