20 template<
typename T,
typename U,
22 bool NeedToTranspose = T::IsVectorAtCompileTime
23 && U::IsVectorAtCompileTime
24 && ((int(T::RowsAtCompileTime) == 1 && int(U::ColsAtCompileTime) == 1)
27 (
int(T::ColsAtCompileTime) == 1 && int(U::RowsAtCompileTime) == 1))
31 typedef typename scalar_product_traits<typename traits<T>::Scalar,
typename traits<U>::Scalar>::ReturnType ResScalar;
33 static inline ResScalar run(
const MatrixBase<T>& a,
const MatrixBase<U>& b)
35 return a.template binaryExpr<scalar_conj_product_op<typename traits<T>::Scalar,
typename traits<U>::Scalar> >(b).sum();
39 template<
typename T,
typename U>
40 struct dot_nocheck<T, U, true>
42 typedef typename scalar_product_traits<typename traits<T>::Scalar,
typename traits<U>::Scalar>::ReturnType ResScalar;
44 static inline ResScalar run(
const MatrixBase<T>& a,
const MatrixBase<U>& b)
46 return a.transpose().template binaryExpr<scalar_conj_product_op<typename traits<T>::Scalar,
typename traits<U>::Scalar> >(b).sum();
62 template<
typename Derived>
63 template<
typename OtherDerived>
65 typename internal::scalar_product_traits<typename internal::traits<Derived>::Scalar,
typename internal::traits<OtherDerived>::Scalar>::ReturnType
68 EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
69 EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
70 EIGEN_STATIC_ASSERT_SAME_VECTOR_SIZE(Derived,OtherDerived)
71 typedef internal::scalar_conj_product_op<Scalar,typename OtherDerived::Scalar> func;
72 EIGEN_CHECK_BINARY_COMPATIBILIY(func,
Scalar,
typename OtherDerived::Scalar);
74 eigen_assert(size() == other.size());
76 return internal::dot_nocheck<Derived,OtherDerived>::run(*
this, other);
87 template<
typename Derived>
90 return numext::real((*this).cwiseAbs2().sum());
99 template<
typename Derived>
102 EIGEN_USING_STD_MATH(sqrt)
103 return sqrt(squaredNorm());
112 template<
typename Derived>
113 inline const typename MatrixBase<Derived>::PlainObject
116 typedef typename internal::nested_eval<Derived,2>::type _Nested;
117 _Nested n(derived());
127 template<
typename Derived>
137 template<
typename Derived,
int p>
138 struct lpNorm_selector
144 EIGEN_USING_STD_MATH(pow)
145 return pow(m.cwiseAbs().array().pow(p).sum(), RealScalar(1)/p);
149 template<typename Derived>
150 struct lpNorm_selector<Derived, 1>
159 template<
typename Derived>
160 struct lpNorm_selector<Derived, 2>
163 static inline typename NumTraits<typename traits<Derived>::Scalar>::Real run(
const MatrixBase<Derived>& m)
169 template<
typename Derived>
170 struct lpNorm_selector<Derived, Infinity>
173 static inline typename NumTraits<typename traits<Derived>::Scalar>::Real run(
const MatrixBase<Derived>& m)
175 return m.cwiseAbs().maxCoeff();
189 template<
typename Derived>
191 inline typename NumTraits<typename internal::traits<Derived>::Scalar>::Real
194 return internal::lpNorm_selector<Derived, p>::run(*
this);
205 template<
typename Derived>
206 template<
typename OtherDerived>
210 typename internal::nested_eval<Derived,2>::type nested(derived());
211 typename internal::nested_eval<OtherDerived,2>::type otherNested(other.derived());
212 return numext::abs2(nested.dot(otherNested)) <= prec * prec * nested.squaredNorm() * otherNested.squaredNorm();
226 template<
typename Derived>
229 typename internal::nested_eval<Derived,1>::type
self(derived());
230 for(Index i = 0; i < cols(); ++i)
232 if(!internal::isApprox(
self.col(i).squaredNorm(), static_cast<RealScalar>(1), prec))
234 for(Index j = 0; j < i; ++j)
235 if(!internal::isMuchSmallerThan(
self.col(i).dot(
self.col(j)), static_cast<Scalar>(1), prec))
243 #endif // EIGEN_DOT_H
const CwiseAbsReturnType cwiseAbs() const
Definition: MatrixBase.h:30
internal::traits< Derived >::Scalar Scalar
Definition: DenseBase.h:68
Holds information about the various numeric (i.e. scalar) types allowed by Eigen. ...
Definition: NumTraits.h:107
void normalize()
Definition: Dot.h:128
RealScalar squaredNorm() const
Definition: Dot.h:88
const PlainObject normalized() const
Definition: Dot.h:114
Definition: Eigen_Colamd.h:54
bool isUnitary(const RealScalar &prec=NumTraits< Scalar >::dummy_precision()) const
Definition: Dot.h:227
bool isOrthogonal(const MatrixBase< OtherDerived > &other, const RealScalar &prec=NumTraits< Scalar >::dummy_precision()) const
Definition: Dot.h:208
Base class for all dense matrices, vectors, and expressions.
Definition: MatrixBase.h:48
RealScalar norm() const
Definition: Dot.h:100