From 3d90c139706daccce577f5f2960ceb98a42871a3 Mon Sep 17 00:00:00 2001 From: Benoit Jacob Date: Mon, 3 Nov 2008 19:14:17 +0000 Subject: norm2() renamed to squaredNorm(), kept as deprecated for now. --- Eigen/src/Array/PartialRedux.h | 4 ++-- Eigen/src/Cholesky/Cholesky.h | 2 +- Eigen/src/Cholesky/LLT.h | 2 +- Eigen/src/Core/Dot.h | 26 ++++++++++++++++++++------ Eigen/src/Core/Fuzzy.h | 14 +++++++------- Eigen/src/Core/MatrixBase.h | 1 + Eigen/src/Geometry/AngleAxis.h | 2 +- Eigen/src/Geometry/ParametrizedLine.h | 2 +- Eigen/src/Geometry/Quaternion.h | 8 ++++---- Eigen/src/QR/HessenbergDecomposition.h | 2 +- Eigen/src/QR/QR.h | 2 +- Eigen/src/QR/Tridiagonalization.h | 2 +- doc/CustomizingEigen.dox | 6 +++--- doc/QuickStartGuide.dox | 6 +++--- doc/snippets/PartialRedux_norm2.cpp | 2 +- test/adjoint.cpp | 4 ++-- test/geometry.cpp | 2 +- 17 files changed, 51 insertions(+), 36 deletions(-) diff --git a/Eigen/src/Array/PartialRedux.h b/Eigen/src/Array/PartialRedux.h index 357654b4e..ad3a8f3d7 100644 --- a/Eigen/src/Array/PartialRedux.h +++ b/Eigen/src/Array/PartialRedux.h @@ -207,8 +207,8 @@ template class PartialRedux * Example: \include PartialRedux_norm2.cpp * Output: \verbinclude PartialRedux_norm2.out * - * \sa MatrixBase::norm2() */ - const typename ReturnType::Type norm2() const + * \sa MatrixBase::squaredNorm() */ + const typename ReturnType::Type squaredNorm() const { return _expression(); } /** \returns a row (or column) vector expression of the norm diff --git a/Eigen/src/Cholesky/Cholesky.h b/Eigen/src/Cholesky/Cholesky.h index 5246d1f54..71549c43e 100644 --- a/Eigen/src/Cholesky/Cholesky.h +++ b/Eigen/src/Cholesky/Cholesky.h @@ -93,7 +93,7 @@ void Cholesky::compute(const MatrixType& a) m_matrix.col(0).end(size-1) = a.row(0).end(size-1).adjoint() / ei_real(m_matrix.coeff(0,0)); for (int j = 1; j < size; ++j) { - Scalar tmp = ei_real(a.coeff(j,j)) - m_matrix.row(j).start(j).norm2(); + Scalar tmp = ei_real(a.coeff(j,j)) - m_matrix.row(j).start(j).squaredNorm(); x = ei_real(tmp); if (x < eps || (!ei_isMuchSmallerThan(ei_imag(tmp), RealScalar(1)))) { diff --git a/Eigen/src/Cholesky/LLT.h b/Eigen/src/Cholesky/LLT.h index 16518b370..2fc658bb7 100644 --- a/Eigen/src/Cholesky/LLT.h +++ b/Eigen/src/Cholesky/LLT.h @@ -106,7 +106,7 @@ void LLT::compute(const MatrixType& a) m_matrix.col(0).end(size-1) = a.row(0).end(size-1).adjoint() / ei_real(m_matrix.coeff(0,0)); for (int j = 1; j < size; ++j) { - Scalar tmp = ei_real(a.coeff(j,j)) - m_matrix.row(j).start(j).norm2(); + Scalar tmp = ei_real(a.coeff(j,j)) - m_matrix.row(j).start(j).squaredNorm(); x = ei_real(tmp); if (x < eps || (!ei_isMuchSmallerThan(ei_imag(tmp), RealScalar(1)))) { diff --git a/Eigen/src/Core/Dot.h b/Eigen/src/Core/Dot.h index e9be929ce..6a1535787 100644 --- a/Eigen/src/Core/Dot.h +++ b/Eigen/src/Core/Dot.h @@ -248,10 +248,10 @@ struct ei_dot_impl * \only_for_vectors * * \note If the scalar type is complex numbers, then this function returns the hermitian - * (sesquilinear) dot product, linear in the first variable and anti-linear in the + * (sesquilinear) dot product, linear in the first variable and conjugate-linear in the * second variable. * - * \sa norm2(), norm() + * \sa squaredNorm(), norm() */ template template @@ -275,6 +275,8 @@ MatrixBase::dot(const MatrixBase& other) const * * \note This is \em not the \em l2 norm. * + * \deprecated Use squaredNorm() instead. This norm2() function is kept only for compatibility and will be removed in Eigen 2.0. + * * \only_for_vectors * * \sa dot(), norm() @@ -285,16 +287,28 @@ inline typename NumTraits::Scalar>::Real MatrixBase< return ei_real(dot(*this)); } +/** \returns the squared norm of *this, i.e. the dot product of *this with itself. + * + * \only_for_vectors + * + * \sa dot(), norm() + */ +template +inline typename NumTraits::Scalar>::Real MatrixBase::squaredNorm() const +{ + return ei_real(dot(*this)); +} + /** \returns the \em l2 norm of *this, i.e. the square root of the dot product of *this with itself. * * \only_for_vectors * - * \sa dot(), norm2() + * \sa dot(), normSquared() */ template inline typename NumTraits::Scalar>::Real MatrixBase::norm() const { - return ei_sqrt(norm2()); + return ei_sqrt(squaredNorm()); } /** \returns an expression of the quotient of *this by its own norm. @@ -338,7 +352,7 @@ bool MatrixBase::isOrthogonal { typename ei_nested::type nested(derived()); typename ei_nested::type otherNested(other.derived()); - return ei_abs2(nested.dot(otherNested)) <= prec * prec * nested.norm2() * otherNested.norm2(); + return ei_abs2(nested.dot(otherNested)) <= prec * prec * nested.squaredNorm() * otherNested.squaredNorm(); } /** \returns true if *this is approximately an unitary matrix, @@ -358,7 +372,7 @@ bool MatrixBase::isUnitary(RealScalar prec) const typename Derived::Nested nested(derived()); for(int i = 0; i < cols(); i++) { - if(!ei_isApprox(nested.col(i).norm2(), static_cast(1), prec)) + if(!ei_isApprox(nested.col(i).squaredNorm(), static_cast(1), prec)) return false; for(int j = 0; j < i; j++) if(!ei_isMuchSmallerThan(nested.col(i).dot(nested.col(j)), static_cast(1), prec)) diff --git a/Eigen/src/Core/Fuzzy.h b/Eigen/src/Core/Fuzzy.h index b48c198b3..8fa1e1c26 100644 --- a/Eigen/src/Core/Fuzzy.h +++ b/Eigen/src/Core/Fuzzy.h @@ -178,17 +178,17 @@ struct ei_fuzzy_selector { EIGEN_STATIC_ASSERT_SAME_VECTOR_SIZE(Derived,OtherDerived); ei_assert(self.size() == other.size()); - return((self - other).norm2() <= std::min(self.norm2(), other.norm2()) * prec * prec); + return((self - other).squaredNorm() <= std::min(self.squaredNorm(), other.squaredNorm()) * prec * prec); } static bool isMuchSmallerThan(const Derived& self, const RealScalar& other, RealScalar prec) { - return(self.norm2() <= ei_abs2(other * prec)); + return(self.squaredNorm() <= ei_abs2(other * prec)); } static bool isMuchSmallerThan(const Derived& self, const OtherDerived& other, RealScalar prec) { EIGEN_STATIC_ASSERT_SAME_VECTOR_SIZE(Derived,OtherDerived); ei_assert(self.size() == other.size()); - return(self.norm2() <= other.norm2() * prec * prec); + return(self.squaredNorm() <= other.squaredNorm() * prec * prec); } }; @@ -203,8 +203,8 @@ struct ei_fuzzy_selector typename Derived::Nested nested(self); typename OtherDerived::Nested otherNested(other); for(int i = 0; i < self.cols(); i++) - if((nested.col(i) - otherNested.col(i)).norm2() - > std::min(nested.col(i).norm2(), otherNested.col(i).norm2()) * prec * prec) + if((nested.col(i) - otherNested.col(i)).squaredNorm() + > std::min(nested.col(i).squaredNorm(), otherNested.col(i).squaredNorm()) * prec * prec) return false; return true; } @@ -212,7 +212,7 @@ struct ei_fuzzy_selector { typename Derived::Nested nested(self); for(int i = 0; i < self.cols(); i++) - if(nested.col(i).norm2() > ei_abs2(other * prec)) + if(nested.col(i).squaredNorm() > ei_abs2(other * prec)) return false; return true; } @@ -223,7 +223,7 @@ struct ei_fuzzy_selector typename Derived::Nested nested(self); typename OtherDerived::Nested otherNested(other); for(int i = 0; i < self.cols(); i++) - if(nested.col(i).norm2() > otherNested.col(i).norm2() * prec * prec) + if(nested.col(i).squaredNorm() > otherNested.col(i).squaredNorm() * prec * prec) return false; return true; } diff --git a/Eigen/src/Core/MatrixBase.h b/Eigen/src/Core/MatrixBase.h index 8329ec148..1b07cba6b 100644 --- a/Eigen/src/Core/MatrixBase.h +++ b/Eigen/src/Core/MatrixBase.h @@ -330,6 +330,7 @@ template class MatrixBase template Scalar dot(const MatrixBase& other) const; + RealScalar squaredNorm() const; RealScalar norm2() const; RealScalar norm() const; const EvalType normalized() const; diff --git a/Eigen/src/Geometry/AngleAxis.h b/Eigen/src/Geometry/AngleAxis.h index 37dee5c76..d5667190f 100644 --- a/Eigen/src/Geometry/AngleAxis.h +++ b/Eigen/src/Geometry/AngleAxis.h @@ -171,7 +171,7 @@ typedef AngleAxis AngleAxisd; template AngleAxis& AngleAxis::operator=(const QuaternionType& q) { - Scalar n2 = q.vec().norm2(); + Scalar n2 = q.vec().squaredNorm(); if (n2 < precision()*precision()) { m_angle = 0; diff --git a/Eigen/src/Geometry/ParametrizedLine.h b/Eigen/src/Geometry/ParametrizedLine.h index 80ce72dcd..e726d2fe9 100644 --- a/Eigen/src/Geometry/ParametrizedLine.h +++ b/Eigen/src/Geometry/ParametrizedLine.h @@ -88,7 +88,7 @@ public: RealScalar squaredDistance(const VectorType& p) const { VectorType diff = p-origin(); - return (diff - diff.dot(direction())* direction()).norm2(); + return (diff - diff.dot(direction())* direction()).squaredNorm(); } /** \returns the distance of a point \a p to its projection onto the line \c *this. * \sa squaredDistance() diff --git a/Eigen/src/Geometry/Quaternion.h b/Eigen/src/Geometry/Quaternion.h index 5b1b41d5e..ec79afa25 100644 --- a/Eigen/src/Geometry/Quaternion.h +++ b/Eigen/src/Geometry/Quaternion.h @@ -154,12 +154,12 @@ public: inline Quaternion& setIdentity() { m_coeffs << 1, 0, 0, 0; return *this; } /** \returns the squared norm of the quaternion's coefficients - * \sa Quaternion::norm(), MatrixBase::norm2() + * \sa Quaternion::norm(), MatrixBase::squaredNorm() */ - inline Scalar norm2() const { return m_coeffs.norm2(); } + inline Scalar squaredNorm() const { return m_coeffs.squaredNorm(); } /** \returns the norm of the quaternion's coefficients - * \sa Quaternion::norm2(), MatrixBase::norm() + * \sa Quaternion::squaredNorm(), MatrixBase::norm() */ inline Scalar norm() const { return m_coeffs.norm(); } @@ -374,7 +374,7 @@ template inline Quaternion Quaternion::inverse() const { // FIXME should this function be called multiplicativeInverse and conjugate() be called inverse() or opposite() ?? - Scalar n2 = this->norm2(); + Scalar n2 = this->squaredNorm(); if (n2 > 0) return Quaternion(conjugate().coeffs() / n2); else diff --git a/Eigen/src/QR/HessenbergDecomposition.h b/Eigen/src/QR/HessenbergDecomposition.h index 9f4865e1d..30541670c 100755 --- a/Eigen/src/QR/HessenbergDecomposition.h +++ b/Eigen/src/QR/HessenbergDecomposition.h @@ -148,7 +148,7 @@ void HessenbergDecomposition::_compute(MatrixType& matA, CoeffVector // start of the householder transformation // squared norm of the vector v skipping the first element - RealScalar v1norm2 = matA.col(i).end(n-(i+2)).norm2(); + RealScalar v1norm2 = matA.col(i).end(n-(i+2)).squaredNorm(); if (ei_isMuchSmallerThan(v1norm2,static_cast(1))) { diff --git a/Eigen/src/QR/QR.h b/Eigen/src/QR/QR.h index a6cd31f12..e584ee120 100644 --- a/Eigen/src/QR/QR.h +++ b/Eigen/src/QR/QR.h @@ -109,7 +109,7 @@ void QR::_compute(const MatrixType& matrix) m_hCoeffs.coeffRef(k) = 0; } } - else if ( (!ei_isMuchSmallerThan(beta=m_qr.col(k).end(remainingSize-1).norm2(),static_cast(1))) || ei_imag(v0)==0 ) + else if ( (!ei_isMuchSmallerThan(beta=m_qr.col(k).end(remainingSize-1).squaredNorm(),static_cast(1))) || ei_imag(v0)==0 ) { // form k-th Householder vector beta = ei_sqrt(ei_abs2(v0)+beta); diff --git a/Eigen/src/QR/Tridiagonalization.h b/Eigen/src/QR/Tridiagonalization.h index 02d376c7a..a9635c961 100755 --- a/Eigen/src/QR/Tridiagonalization.h +++ b/Eigen/src/QR/Tridiagonalization.h @@ -198,7 +198,7 @@ void Tridiagonalization::_compute(MatrixType& matA, CoeffVectorType& // start of the householder transformation // squared norm of the vector v skipping the first element - RealScalar v1norm2 = matA.col(i).end(n-(i+2)).norm2(); + RealScalar v1norm2 = matA.col(i).end(n-(i+2)).squaredNorm(); if (ei_isMuchSmallerThan(v1norm2,static_cast(1))) { diff --git a/doc/CustomizingEigen.dox b/doc/CustomizingEigen.dox index 9603c8076..f51c02e27 100644 --- a/doc/CustomizingEigen.dox +++ b/doc/CustomizingEigen.dox @@ -32,13 +32,13 @@ inline Scalar& at(uint i, uint j) { return this->operator()(i,j); } inline Scalar at(uint i) const { return this->operator[](i); } inline Scalar& at(uint i) { return this->operator[](i); } -inline RealScalar squaredLength() const { return norm2(); } +inline RealScalar squaredLength() const { return squaredNorm(); } inline RealScalar length() const { return norm(); } -inline RealScalar invLength(void) const { return fast_inv_sqrt(norm2()); } +inline RealScalar invLength(void) const { return fast_inv_sqrt(squaredNorm()); } template inline Scalar squaredDistanceTo(const MatrixBase& other) const -{ return (derived() - other.derived()).norm2(); } +{ return (derived() - other.derived()).squaredNorm(); } template inline RealScalar distanceTo(const MatrixBase& other) const diff --git a/doc/QuickStartGuide.dox b/doc/QuickStartGuide.dox index 1d2f623b3..c46698dbf 100644 --- a/doc/QuickStartGuide.dox +++ b/doc/QuickStartGuide.dox @@ -352,7 +352,7 @@ vec3 = vec1.cross(vec2);\endcode Eigen provides several reduction methods such as: \link MatrixBase::minCoeff() minCoeff() \endlink, \link MatrixBase::maxCoeff() maxCoeff() \endlink, \link MatrixBase::sum() sum() \endlink, \link MatrixBase::trace() trace() \endlink, -\link MatrixBase::norm() norm() \endlink, \link MatrixBase::norm2() norm2() \endlink, +\link MatrixBase::norm() norm() \endlink, \link MatrixBase::squaredNorm() squaredNorm() \endlink, \link MatrixBase::all() all() \endlink,and \link MatrixBase::any() any() \endlink. All reduction operations can be done matrix-wise, \link MatrixBase::colwise() column-wise \endlink or @@ -473,8 +473,8 @@ mat3 = mat1.adjoint() * mat2; \link MatrixBase::norm() norm \endlink of a vector \n -\link MatrixBase::norm2() squared norm \endlink of a vector -\code vec.norm(); \endcode \n \code vec.norm2() \endcode +\link MatrixBase::squaredNorm() squared norm \endlink of a vector +\code vec.norm(); \endcode \n \code vec.squaredNorm() \endcode returns a \link MatrixBase::normalized() normalized \endlink vector \n diff --git a/doc/snippets/PartialRedux_norm2.cpp b/doc/snippets/PartialRedux_norm2.cpp index a077309a3..9f3293e65 100644 --- a/doc/snippets/PartialRedux_norm2.cpp +++ b/doc/snippets/PartialRedux_norm2.cpp @@ -1,3 +1,3 @@ Matrix3d m = Matrix3d::Random(); cout << "Here is the matrix m:" << endl << m << endl; -cout << "Here is the square norm of each row:" << endl << m.rowwise().norm2() << endl; +cout << "Here is the square norm of each row:" << endl << m.rowwise().squaredNorm() << endl; diff --git a/test/adjoint.cpp b/test/adjoint.cpp index 18256a124..bf74b3f4f 100644 --- a/test/adjoint.cpp +++ b/test/adjoint.cpp @@ -68,9 +68,9 @@ template void adjoint(const MatrixType& m) VERIFY(ei_isApprox((s1 * v1 + s2 * v2).dot(v3), s1 * v1.dot(v3) + s2 * v2.dot(v3), largerEps)); VERIFY(ei_isApprox(v3.dot(s1 * v1 + s2 * v2), ei_conj(s1)*v3.dot(v1)+ei_conj(s2)*v3.dot(v2), largerEps)); VERIFY_IS_APPROX(ei_conj(v1.dot(v2)), v2.dot(v1)); - VERIFY_IS_APPROX(ei_abs(v1.dot(v1)), v1.norm2()); + VERIFY_IS_APPROX(ei_abs(v1.dot(v1)), v1.squaredNorm()); if(NumTraits::HasFloatingPoint) - VERIFY_IS_APPROX(v1.norm2(), v1.norm() * v1.norm()); + VERIFY_IS_APPROX(v1.squaredNorm(), v1.norm() * v1.norm()); VERIFY_IS_MUCH_SMALLER_THAN(ei_abs(vzero.dot(v1)), static_cast(1)); if(NumTraits::HasFloatingPoint) VERIFY_IS_MUCH_SMALLER_THAN(vzero.norm(), static_cast(1)); diff --git a/test/geometry.cpp b/test/geometry.cpp index 24904e264..b6899501c 100644 --- a/test/geometry.cpp +++ b/test/geometry.cpp @@ -78,7 +78,7 @@ template void geometry(void) VERIFY_IS_APPROX(v0, AngleAxisx(a, v0.normalized()) * v0); VERIFY_IS_APPROX(-v0, AngleAxisx(M_PI, v0.unitOrthogonal()) * v0); - VERIFY_IS_APPROX(ei_cos(a)*v0.norm2(), v0.dot(AngleAxisx(a, v0.unitOrthogonal()) * v0)); + VERIFY_IS_APPROX(ei_cos(a)*v0.squaredNorm(), v0.dot(AngleAxisx(a, v0.unitOrthogonal()) * v0)); m = AngleAxisx(a, v0.normalized()).toRotationMatrix().adjoint(); VERIFY_IS_APPROX(Matrix3::Identity(), m * AngleAxisx(a, v0.normalized())); VERIFY_IS_APPROX(Matrix3::Identity(), AngleAxisx(a, v0.normalized()) * m); -- cgit v1.2.3