diff options
author | 2009-05-23 13:31:20 +0000 | |
---|---|---|
committer | 2009-05-23 13:31:20 +0000 | |
commit | 9d5728c5117f958e8826aa2500c42529a8f4865f (patch) | |
tree | 726dfa2fbd2bf06edca9dc0309b867ffb1a5a61d /Eigen/src/QR/Tridiagonalization.h | |
parent | 42848498aa65158e54f6c7e72ef84a709d3bf340 (diff) |
fix #4
and also improve performance of Tridiag::diag/subDiag at the same time
Diffstat (limited to 'Eigen/src/QR/Tridiagonalization.h')
-rw-r--r-- | Eigen/src/QR/Tridiagonalization.h | 19 |
1 files changed, 13 insertions, 6 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<typename _MatrixType> class Tridiagonalization typedef Matrix<RealScalar, Size, 1> DiagonalType; typedef Matrix<RealScalar, SizeMinusOne, 1> SubDiagonalType; - typedef typename NestByValue<Diagonal<MatrixType,0> >::RealReturnType DiagonalReturnType; - - typedef typename NestByValue<Diagonal< - NestByValue<Block<MatrixType,SizeMinusOne,SizeMinusOne> >,0 > >::RealReturnType SubDiagonalReturnType; + typedef typename ei_meta_if<NumTraits<Scalar>::IsComplex, + typename NestByValue<Diagonal<MatrixType,0> >::RealReturnType, + Diagonal<MatrixType,0> + >::ret DiagonalReturnType; + + typedef typename ei_meta_if<NumTraits<Scalar>::IsComplex, + typename NestByValue<Diagonal< + NestByValue<Block<MatrixType,SizeMinusOne,SizeMinusOne> >,0 > >::RealReturnType, + Diagonal< + NestByValue<Block<MatrixType,SizeMinusOne,SizeMinusOne> >,0 > + >::ret SubDiagonalReturnType; /** This constructor initializes a Tridiagonalization object for * further use with Tridiagonalization::compute() @@ -136,7 +143,7 @@ template<typename MatrixType> const typename Tridiagonalization<MatrixType>::DiagonalReturnType Tridiagonalization<MatrixType>::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<MatrixType>::subDiagonal(void) const { int n = m_matrix.rows(); return Block<MatrixType,SizeMinusOne,SizeMinusOne>(m_matrix, 1, 0, n-1,n-1) - .nestByValue().diagonal().nestByValue().real(); + .nestByValue().diagonal().nestByValue(); } /** constructs and returns the tridiagonal matrix T. |