diff options
author | Jitse Niesen <jitse@maths.leeds.ac.uk> | 2010-05-30 21:49:35 +0100 |
---|---|---|
committer | Jitse Niesen <jitse@maths.leeds.ac.uk> | 2010-05-30 21:49:35 +0100 |
commit | db8631b66a4f5cb9957a58cc629be5ef438e3059 (patch) | |
tree | 50a3ef1425a13e183f42ae36dd34087899e06460 /Eigen/src/Eigenvalues/HessenbergDecomposition.h | |
parent | 6ce22a61b3a2560a5464b368bee64555645da59f (diff) |
Guard with assert against using decomposition objects uninitialized.
Diffstat (limited to 'Eigen/src/Eigenvalues/HessenbergDecomposition.h')
-rw-r--r-- | Eigen/src/Eigenvalues/HessenbergDecomposition.h | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/Eigen/src/Eigenvalues/HessenbergDecomposition.h b/Eigen/src/Eigenvalues/HessenbergDecomposition.h index 1111ffb12..220531bf5 100644 --- a/Eigen/src/Eigenvalues/HessenbergDecomposition.h +++ b/Eigen/src/Eigenvalues/HessenbergDecomposition.h @@ -107,7 +107,8 @@ template<typename _MatrixType> class HessenbergDecomposition */ HessenbergDecomposition(Index size = Size==Dynamic ? 2 : Size) : m_matrix(size,size), - m_temp(size) + m_temp(size), + m_isInitialized(false) { if(size>1) m_hCoeffs.resize(size-1); @@ -124,12 +125,17 @@ template<typename _MatrixType> class HessenbergDecomposition */ HessenbergDecomposition(const MatrixType& matrix) : m_matrix(matrix), - m_temp(matrix.rows()) + m_temp(matrix.rows()), + m_isInitialized(false) { if(matrix.rows()<2) + { + m_isInitialized = true; return; + } m_hCoeffs.resize(matrix.rows()-1,1); _compute(m_matrix, m_hCoeffs, m_temp); + m_isInitialized = true; } /** \brief Computes Hessenberg decomposition of given matrix. @@ -152,9 +158,13 @@ template<typename _MatrixType> class HessenbergDecomposition { m_matrix = matrix; if(matrix.rows()<2) + { + m_isInitialized = true; return; + } m_hCoeffs.resize(matrix.rows()-1,1); _compute(m_matrix, m_hCoeffs, m_temp); + m_isInitialized = true; } /** \brief Returns the Householder coefficients. @@ -170,7 +180,11 @@ template<typename _MatrixType> class HessenbergDecomposition * * \sa packedMatrix(), \ref Householder_Module "Householder module" */ - const CoeffVectorType& householderCoefficients() const { return m_hCoeffs; } + const CoeffVectorType& householderCoefficients() const + { + ei_assert(m_isInitialized && "HessenbergDecomposition is not initialized."); + return m_hCoeffs; + } /** \brief Returns the internal representation of the decomposition * @@ -201,7 +215,11 @@ template<typename _MatrixType> class HessenbergDecomposition * * \sa householderCoefficients() */ - const MatrixType& packedMatrix() const { return m_matrix; } + const MatrixType& packedMatrix() const + { + ei_assert(m_isInitialized && "HessenbergDecomposition is not initialized."); + return m_matrix; + } /** \brief Reconstructs the orthogonal matrix Q in the decomposition * @@ -219,6 +237,7 @@ template<typename _MatrixType> class HessenbergDecomposition */ HouseholderSequenceType matrixQ() const { + ei_assert(m_isInitialized && "HessenbergDecomposition is not initialized."); return HouseholderSequenceType(m_matrix, m_hCoeffs.conjugate(), false, m_matrix.rows() - 1, 1); } @@ -244,6 +263,7 @@ template<typename _MatrixType> class HessenbergDecomposition */ HessenbergDecompositionMatrixHReturnType<MatrixType> matrixH() const { + ei_assert(m_isInitialized && "HessenbergDecomposition is not initialized."); return HessenbergDecompositionMatrixHReturnType<MatrixType>(*this); } @@ -257,6 +277,7 @@ template<typename _MatrixType> class HessenbergDecomposition MatrixType m_matrix; CoeffVectorType m_hCoeffs; VectorType m_temp; + bool m_isInitialized; }; #ifndef EIGEN_HIDE_HEAVY_CODE |