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))
32 typedef typename conj_prod::result_type ResScalar;
37 return a.template binaryExpr<conj_prod>(b).
sum();
41 template<
typename T,
typename U>
45 typedef typename conj_prod::result_type ResScalar;
50 return a.
transpose().template binaryExpr<conj_prod>(b).sum();
67 template<
typename Derived>
68 template<
typename OtherDerived>
74 EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
75 EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
76 EIGEN_STATIC_ASSERT_SAME_VECTOR_SIZE(Derived,OtherDerived)
77 #if !(defined(EIGEN_NO_STATIC_ASSERT) && defined(EIGEN_NO_DEBUG))
79 EIGEN_CHECK_BINARY_COMPATIBILIY(func,Scalar,
typename OtherDerived::Scalar);
82 eigen_assert(size() == other.size());
95 template<
typename Derived>
98 return numext::real((*this).cwiseAbs2().sum());
107 template<
typename Derived>
110 return numext::sqrt(squaredNorm());
122 template<
typename Derived>
123 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const typename MatrixBase<Derived>::PlainObject
127 _Nested n(derived());
128 RealScalar z = n.squaredNorm();
131 return n / numext::sqrt(z);
144 template<
typename Derived>
147 RealScalar z = squaredNorm();
150 derived() /= numext::sqrt(z);
165 template<
typename Derived>
166 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const typename MatrixBase<Derived>::PlainObject
170 _Nested n(derived());
171 RealScalar w = n.cwiseAbs().maxCoeff();
172 RealScalar z = (n/w).squaredNorm();
174 return n / (numext::sqrt(z)*w);
190 template<
typename Derived>
193 RealScalar w = cwiseAbs().maxCoeff();
194 RealScalar z = (derived()/w).squaredNorm();
196 derived() /= numext::sqrt(z)*w;
203 template<
typename Derived,
int p>
211 return pow(m.cwiseAbs().
array().pow(p).sum(), RealScalar(1)/p);
215 template<
typename Derived>
221 return m.cwiseAbs().
sum();
225 template<
typename Derived>
235 template<
typename Derived>
242 if(Derived::SizeAtCompileTime==0 || (Derived::SizeAtCompileTime==
Dynamic && m.size()==0))
243 return RealScalar(0);
260 template<
typename Derived>
262 #ifndef EIGEN_PARSED_BY_DOXYGEN
265 EIGEN_DEVICE_FUNC MatrixBase<Derived>::RealScalar
280 template<
typename Derived>
281 template<
typename OtherDerived>
287 return numext::abs2(nested.dot(otherNested)) <= prec * prec * nested.squaredNorm() * otherNested.squaredNorm();
301 template<
typename Derived>
305 for(
Index i = 0; i < cols(); ++i)
307 if(!internal::isApprox(
self.col(i).squaredNorm(),
static_cast<RealScalar
>(1), prec))
309 for(
Index j = 0; j < i; ++j)
310 if(!internal::isMuchSmallerThan(
self.col(i).dot(
self.col(j)),
static_cast<Scalar>(1), prec))
318 #endif // EIGEN_DOT_H