diff options
author | Benoit Jacob <jacob.benoit.1@gmail.com> | 2009-11-10 21:22:20 -0500 |
---|---|---|
committer | Benoit Jacob <jacob.benoit.1@gmail.com> | 2009-11-10 21:22:20 -0500 |
commit | a440385b41650a1657d3b7005ba6f040eaea0bd4 (patch) | |
tree | 83b825e1d7968de417ceb9dc9c08860b1e99d413 | |
parent | e06aa749a4bb34c79977070b82d7670775c4ad7a (diff) |
*adapt Householder to the convention that we now favor refs over ptrs for output. Keep "workspace" as pointer because it is an array (which is now more obvious).
*rename makeHouseholderSequence to householderSequence, because that's what it returns.
-rw-r--r-- | Eigen/src/Core/MatrixBase.h | 6 | ||||
-rw-r--r-- | Eigen/src/Eigenvalues/Tridiagonalization.h | 2 | ||||
-rw-r--r-- | Eigen/src/Householder/Householder.h | 30 | ||||
-rw-r--r-- | Eigen/src/Householder/HouseholderSequence.h | 2 | ||||
-rw-r--r-- | Eigen/src/QR/ColPivHouseholderQR.h | 4 | ||||
-rw-r--r-- | Eigen/src/QR/FullPivHouseholderQR.h | 2 | ||||
-rw-r--r-- | Eigen/src/QR/HouseholderQR.h | 4 | ||||
-rw-r--r-- | test/householder.cpp | 6 |
8 files changed, 28 insertions, 28 deletions
diff --git a/Eigen/src/Core/MatrixBase.h b/Eigen/src/Core/MatrixBase.h index e5eed715b..4f8a8ce41 100644 --- a/Eigen/src/Core/MatrixBase.h +++ b/Eigen/src/Core/MatrixBase.h @@ -783,10 +783,10 @@ template<typename Derived> class MatrixBase ////////// Householder module /////////// - void makeHouseholderInPlace(Scalar *tau, RealScalar *beta); + void makeHouseholderInPlace(Scalar& tau, RealScalar& beta); template<typename EssentialPart> - void makeHouseholder(EssentialPart *essential, - Scalar *tau, RealScalar *beta) const; + void makeHouseholder(EssentialPart& essential, + Scalar& tau, RealScalar& beta) const; template<typename EssentialPart> void applyHouseholderOnTheLeft(const EssentialPart& essential, const Scalar& tau, diff --git a/Eigen/src/Eigenvalues/Tridiagonalization.h b/Eigen/src/Eigenvalues/Tridiagonalization.h index 5f891bfa6..04b9f72d7 100644 --- a/Eigen/src/Eigenvalues/Tridiagonalization.h +++ b/Eigen/src/Eigenvalues/Tridiagonalization.h @@ -204,7 +204,7 @@ void Tridiagonalization<MatrixType>::_compute(MatrixType& matA, CoeffVectorType& int remainingSize = n-i-1; RealScalar beta; Scalar h; - matA.col(i).end(remainingSize).makeHouseholderInPlace(&h, &beta); + matA.col(i).end(remainingSize).makeHouseholderInPlace(h, beta); // Apply similarity transformation to remaining columns, // i.e., A = H A H' where H = I - h v v' and v = matA.col(i).end(n-i-1) diff --git a/Eigen/src/Householder/Householder.h b/Eigen/src/Householder/Householder.h index 775b2f872..a54be8c01 100644 --- a/Eigen/src/Householder/Householder.h +++ b/Eigen/src/Householder/Householder.h @@ -35,18 +35,18 @@ template<int n> struct ei_decrement_size template<typename EssentialPart> void makeTrivialHouseholder( - EssentialPart *essential, - typename EssentialPart::RealScalar *beta) + EssentialPart &essential, + typename EssentialPart::RealScalar &beta) { - *beta = typename EssentialPart::RealScalar(0); - essential->setZero(); + beta = typename EssentialPart::RealScalar(0); + essential.setZero(); } template<typename Derived> -void MatrixBase<Derived>::makeHouseholderInPlace(Scalar *tau, RealScalar *beta) +void MatrixBase<Derived>::makeHouseholderInPlace(Scalar& tau, RealScalar& beta) { VectorBlock<Derived, ei_decrement_size<SizeAtCompileTime>::ret> essentialPart(derived(), 1, size()-1); - makeHouseholder(&essentialPart, tau, beta); + makeHouseholder(essentialPart, tau, beta); } /** Computes the elementary reflector H such that: @@ -67,9 +67,9 @@ void MatrixBase<Derived>::makeHouseholderInPlace(Scalar *tau, RealScalar *beta) template<typename Derived> template<typename EssentialPart> void MatrixBase<Derived>::makeHouseholder( - EssentialPart *essential, - Scalar *tau, - RealScalar *beta) const + EssentialPart& essential, + Scalar& tau, + RealScalar& beta) const { EIGEN_STATIC_ASSERT_VECTOR_ONLY(EssentialPart) VectorBlock<Derived, EssentialPart::SizeAtCompileTime> tail(derived(), 1, size()-1); @@ -79,16 +79,16 @@ void MatrixBase<Derived>::makeHouseholder( if(tailSqNorm == RealScalar(0) && ei_imag(c0)==RealScalar(0)) { - *tau = 0; - *beta = ei_real(c0); + tau = 0; + beta = ei_real(c0); } else { - *beta = ei_sqrt(ei_abs2(c0) + tailSqNorm); + beta = ei_sqrt(ei_abs2(c0) + tailSqNorm); if (ei_real(c0)>=0.) - *beta = -*beta; - *essential = tail / (c0 - *beta); - *tau = ei_conj((*beta - c0) / *beta); + beta = -beta; + essential = tail / (c0 - beta); + tau = ei_conj((beta - c0) / beta); } } diff --git a/Eigen/src/Householder/HouseholderSequence.h b/Eigen/src/Householder/HouseholderSequence.h index f5a8dd742..85aa90362 100644 --- a/Eigen/src/Householder/HouseholderSequence.h +++ b/Eigen/src/Householder/HouseholderSequence.h @@ -162,7 +162,7 @@ private: }; template<typename VectorsType, typename CoeffsType> -HouseholderSequence<VectorsType,CoeffsType> makeHouseholderSequence(const VectorsType& v, const CoeffsType& h, bool trans=false) +HouseholderSequence<VectorsType,CoeffsType> householderSequence(const VectorsType& v, const CoeffsType& h, bool trans=false) { return HouseholderSequence<VectorsType,CoeffsType>(v, h, trans); } diff --git a/Eigen/src/QR/ColPivHouseholderQR.h b/Eigen/src/QR/ColPivHouseholderQR.h index d6be9a506..d3c6b4c7c 100644 --- a/Eigen/src/QR/ColPivHouseholderQR.h +++ b/Eigen/src/QR/ColPivHouseholderQR.h @@ -305,7 +305,7 @@ ColPivHouseholderQR<MatrixType>& ColPivHouseholderQR<MatrixType>::compute(const } RealScalar beta; - m_qr.col(k).end(rows-k).makeHouseholderInPlace(&m_hCoeffs.coeffRef(k), &beta); + m_qr.col(k).end(rows-k).makeHouseholderInPlace(m_hCoeffs.coeffRef(k), beta); m_qr.coeffRef(k,k) = beta; m_qr.corner(BottomRight, rows-k, cols-k-1) @@ -347,7 +347,7 @@ struct ei_solve_retval<ColPivHouseholderQR<_MatrixType>, Rhs> typename Rhs::PlainMatrixType c(rhs()); // Note that the matrix Q = H_0^* H_1^*... so its inverse is Q^* = (H_0 H_1 ...)^T - c.applyOnTheLeft(makeHouseholderSequence( + c.applyOnTheLeft(householderSequence( dec().matrixQR().corner(TopLeft,rows,dec().rank()), dec().hCoeffs().start(dec().rank())).transpose() ); diff --git a/Eigen/src/QR/FullPivHouseholderQR.h b/Eigen/src/QR/FullPivHouseholderQR.h index 8be90a3c9..07df5ed6b 100644 --- a/Eigen/src/QR/FullPivHouseholderQR.h +++ b/Eigen/src/QR/FullPivHouseholderQR.h @@ -315,7 +315,7 @@ FullPivHouseholderQR<MatrixType>& FullPivHouseholderQR<MatrixType>::compute(cons } RealScalar beta; - m_qr.col(k).end(rows-k).makeHouseholderInPlace(&m_hCoeffs.coeffRef(k), &beta); + m_qr.col(k).end(rows-k).makeHouseholderInPlace(m_hCoeffs.coeffRef(k), beta); m_qr.coeffRef(k,k) = beta; m_qr.corner(BottomRight, rows-k, cols-k-1) diff --git a/Eigen/src/QR/HouseholderQR.h b/Eigen/src/QR/HouseholderQR.h index 04b153cc4..8d842d129 100644 --- a/Eigen/src/QR/HouseholderQR.h +++ b/Eigen/src/QR/HouseholderQR.h @@ -198,7 +198,7 @@ HouseholderQR<MatrixType>& HouseholderQR<MatrixType>::compute(const MatrixType& int remainingCols = cols - k - 1; RealScalar beta; - m_qr.col(k).end(remainingRows).makeHouseholderInPlace(&m_hCoeffs.coeffRef(k), &beta); + m_qr.col(k).end(remainingRows).makeHouseholderInPlace(m_hCoeffs.coeffRef(k), beta); m_qr.coeffRef(k,k) = beta; // apply H to remaining part of m_qr from the left @@ -225,7 +225,7 @@ struct ei_solve_retval<HouseholderQR<_MatrixType>, Rhs> typename Rhs::PlainMatrixType c(rhs()); // Note that the matrix Q = H_0^* H_1^*... so its inverse is Q^* = (H_0 H_1 ...)^T - c.applyOnTheLeft(makeHouseholderSequence( + c.applyOnTheLeft(householderSequence( dec().matrixQR().corner(TopLeft,rows,rank), dec().hCoeffs().start(rank)).transpose() ); diff --git a/test/householder.cpp b/test/householder.cpp index c9b07622d..6e480c0de 100644 --- a/test/householder.cpp +++ b/test/householder.cpp @@ -50,7 +50,7 @@ template<typename MatrixType> void householder(const MatrixType& m) VectorType v1 = VectorType::Random(rows), v2; v2 = v1; - v1.makeHouseholder(&essential, &beta, &alpha); + v1.makeHouseholder(essential, beta, alpha); v1.applyHouseholderOnTheLeft(essential,beta,tmp); VERIFY_IS_APPROX(v1.norm(), v2.norm()); VERIFY_IS_MUCH_SMALLER_THAN(v1.end(rows-1).norm(), v1.norm()); @@ -66,7 +66,7 @@ template<typename MatrixType> void householder(const MatrixType& m) if(even) v1.end(rows-1).setZero(); m1.colwise() = v1; m2 = m1; - m1.col(0).makeHouseholder(&essential, &beta, &alpha); + m1.col(0).makeHouseholder(essential, beta, alpha); m1.applyHouseholderOnTheLeft(essential,beta,tmp); VERIFY_IS_APPROX(m1.norm(), m2.norm()); VERIFY_IS_MUCH_SMALLER_THAN(m1.block(1,0,rows-1,cols).norm(), m1.norm()); @@ -78,7 +78,7 @@ template<typename MatrixType> void householder(const MatrixType& m) SquareMatrixType m3(rows,rows), m4(rows,rows); m3.rowwise() = v1.transpose(); m4 = m3; - m3.row(0).makeHouseholder(&essential, &beta, &alpha); + m3.row(0).makeHouseholder(essential, beta, alpha); m3.applyHouseholderOnTheRight(essential,beta,tmp); VERIFY_IS_APPROX(m3.norm(), m4.norm()); VERIFY_IS_MUCH_SMALLER_THAN(m3.block(0,1,rows,rows-1).norm(), m3.norm()); |