From 82c5438c95a587708483d3bb0933b9166d7bb303 Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Thu, 23 Jul 2009 21:22:51 +0200 Subject: split and add unit tests for symm and syrk, the .rank*update() functions now returns a reference to *this --- Eigen/src/Core/SelfAdjointView.h | 10 ++++++---- Eigen/src/Core/products/SelfadjointProduct.h | 4 +++- Eigen/src/Core/products/SelfadjointRank2Update.h | 4 +++- 3 files changed, 12 insertions(+), 6 deletions(-) (limited to 'Eigen/src') diff --git a/Eigen/src/Core/SelfAdjointView.h b/Eigen/src/Core/SelfAdjointView.h index b1b4f9e32..4787bcbd8 100644 --- a/Eigen/src/Core/SelfAdjointView.h +++ b/Eigen/src/Core/SelfAdjointView.h @@ -120,23 +120,25 @@ template class SelfAdjointView /** Perform a symmetric rank 2 update of the selfadjoint matrix \c *this: * \f$ this = this + \alpha ( u v^* + v u^*) \f$ + * \returns a reference to \c *this * * The vectors \a u and \c v \b must be column vectors, however they can be * a adjoint expression without any overhead. Only the meaningful triangular * part of the matrix is updated, the rest is left unchanged. */ template - void rank2update(const MatrixBase& u, const MatrixBase& v, Scalar alpha = Scalar(1)); + SelfAdjointView& rank2update(const MatrixBase& u, const MatrixBase& v, Scalar alpha = Scalar(1)); /** Perform a symmetric rank K update of the selfadjoint matrix \c *this: - * \f$ this = this + \alpha ( u u^* ) \f$ - * where \a u is a vector or matrix. + * \f$ this = this + \alpha ( u u^* ) \f$ where \a u is a vector or matrix. + * + * \returns a reference to \c *this * * Note that to perform \f$ this = this + \alpha ( u^* u ) \f$ you can simply * call this function with u.adjoint(). */ template - void rankKupdate(const MatrixBase& u, Scalar alpha = Scalar(1)); + SelfAdjointView& rankKupdate(const MatrixBase& u, Scalar alpha = Scalar(1)); /////////// Cholesky module /////////// diff --git a/Eigen/src/Core/products/SelfadjointProduct.h b/Eigen/src/Core/products/SelfadjointProduct.h index b4ca4e786..08df9e15c 100644 --- a/Eigen/src/Core/products/SelfadjointProduct.h +++ b/Eigen/src/Core/products/SelfadjointProduct.h @@ -126,7 +126,7 @@ struct ei_selfadjoint_product template template -void SelfAdjointView +SelfAdjointView& SelfAdjointView ::rankKupdate(const MatrixBase& u, Scalar alpha) { typedef ei_blas_traits UBlasTraits; @@ -144,6 +144,8 @@ void SelfAdjointView !UBlasTraits::NeedToConjugate, UpLo> ::run(_expression().cols(), actualU.cols(), &actualU.coeff(0,0), actualU.stride(), const_cast(_expression().data()), _expression().stride(), actualAlpha); + + return *this; } diff --git a/Eigen/src/Core/products/SelfadjointRank2Update.h b/Eigen/src/Core/products/SelfadjointRank2Update.h index edb57ecd5..6c8a28f65 100644 --- a/Eigen/src/Core/products/SelfadjointRank2Update.h +++ b/Eigen/src/Core/products/SelfadjointRank2Update.h @@ -69,7 +69,7 @@ template struct ei_conj_expr_if template template -void SelfAdjointView +SelfAdjointView& SelfAdjointView ::rank2update(const MatrixBase& u, const MatrixBase& v, Scalar alpha) { typedef ei_blas_traits UBlasTraits; @@ -91,6 +91,8 @@ void SelfAdjointView typename ei_conj_expr_if::ret, (IsRowMajor ? (UpLo==UpperTriangular ? LowerTriangular : UpperTriangular) : UpLo)> ::run(const_cast(_expression().data()),_expression().stride(),actualU,actualV,actualAlpha); + + return *this; } #endif // EIGEN_SELFADJOINTRANK2UPTADE_H -- cgit v1.2.3