From 9d5728c5117f958e8826aa2500c42529a8f4865f Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Sat, 23 May 2009 13:31:20 +0000 Subject: [PATCH] fix #4 and also improve performance of Tridiag::diag/subDiag at the same time --- Eigen/src/QR/Tridiagonalization.h | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/Eigen/src/QR/Tridiagonalization.h b/Eigen/src/QR/Tridiagonalization.h index 6ee7ab983..b2381da0c 100644 --- a/Eigen/src/QR/Tridiagonalization.h +++ b/Eigen/src/QR/Tridiagonalization.h @@ -60,10 +60,17 @@ template class Tridiagonalization typedef Matrix DiagonalType; typedef Matrix SubDiagonalType; - typedef typename NestByValue >::RealReturnType DiagonalReturnType; + typedef typename ei_meta_if::IsComplex, + typename NestByValue >::RealReturnType, + Diagonal + >::ret DiagonalReturnType; - typedef typename NestByValue >,0 > >::RealReturnType SubDiagonalReturnType; + typedef typename ei_meta_if::IsComplex, + typename NestByValue >,0 > >::RealReturnType, + Diagonal< + NestByValue >,0 > + >::ret SubDiagonalReturnType; /** This constructor initializes a Tridiagonalization object for * further use with Tridiagonalization::compute() @@ -136,7 +143,7 @@ template const typename Tridiagonalization::DiagonalReturnType Tridiagonalization::diagonal(void) const { - return m_matrix.diagonal().nestByValue().real(); + return m_matrix.diagonal().nestByValue(); } /** \returns an expression of the sub-diagonal vector */ @@ -146,7 +153,7 @@ Tridiagonalization::subDiagonal(void) const { int n = m_matrix.rows(); return Block(m_matrix, 1, 0, n-1,n-1) - .nestByValue().diagonal().nestByValue().real(); + .nestByValue().diagonal().nestByValue(); } /** constructs and returns the tridiagonal matrix T.