From c90ccd089a979bbbb96ac3c02b1b65133f6287e1 Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Wed, 23 Dec 2009 12:30:05 +0100 Subject: [PATCH] clean a bit Hessenberg and make sure the subdiagonal coeff is real even for 2x2 matrices --- .../src/Eigenvalues/HessenbergDecomposition.h | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/Eigen/src/Eigenvalues/HessenbergDecomposition.h b/Eigen/src/Eigenvalues/HessenbergDecomposition.h index 69597e77f..49a2469be 100644 --- a/Eigen/src/Eigenvalues/HessenbergDecomposition.h +++ b/Eigen/src/Eigenvalues/HessenbergDecomposition.h @@ -1,7 +1,7 @@ // This file is part of Eigen, a lightweight C++ template library // for linear algebra. // -// Copyright (C) 2008 Gael Guennebaud +// Copyright (C) 2008-2009 Gael Guennebaud // // Eigen is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -55,25 +55,21 @@ template class HessenbergDecomposition }; typedef Matrix CoeffVectorType; - typedef Matrix DiagonalType; - typedef Matrix SubDiagonalType; - - typedef typename Diagonal::RealReturnType DiagonalReturnType; - - typedef typename Diagonal< - Block,0 >::RealReturnType SubDiagonalReturnType; /** This constructor initializes a HessenbergDecomposition object for * further use with HessenbergDecomposition::compute() */ HessenbergDecomposition(int size = Size==Dynamic ? 2 : Size) - : m_matrix(size,size), m_hCoeffs(size-1) - {} + : m_matrix(size,size) + { + if(size>1) + m_hCoeffs.resize(size-1); + } HessenbergDecomposition(const MatrixType& matrix) : m_matrix(matrix) { - if(matrix.rows()<=2) + if(matrix.rows()<2) return; m_hCoeffs.resize(matrix.rows()-1,1); _compute(m_matrix, m_hCoeffs); @@ -86,7 +82,7 @@ template class HessenbergDecomposition void compute(const MatrixType& matrix) { m_matrix = matrix; - if(matrix.rows()<=2) + if(matrix.rows()<2) return; m_hCoeffs.resize(matrix.rows()-1,1); _compute(m_matrix, m_hCoeffs);