aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src/QR/Tridiagonalization.h
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2009-05-23 13:31:20 +0000
committerGravatar Gael Guennebaud <g.gael@free.fr>2009-05-23 13:31:20 +0000
commit9d5728c5117f958e8826aa2500c42529a8f4865f (patch)
tree726dfa2fbd2bf06edca9dc0309b867ffb1a5a61d /Eigen/src/QR/Tridiagonalization.h
parent42848498aa65158e54f6c7e72ef84a709d3bf340 (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.h19
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.