aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src/Eigenvalues/HessenbergDecomposition.h
diff options
context:
space:
mode:
authorGravatar Jitse Niesen <jitse@maths.leeds.ac.uk>2010-05-30 21:49:35 +0100
committerGravatar Jitse Niesen <jitse@maths.leeds.ac.uk>2010-05-30 21:49:35 +0100
commitdb8631b66a4f5cb9957a58cc629be5ef438e3059 (patch)
tree50a3ef1425a13e183f42ae36dd34087899e06460 /Eigen/src/Eigenvalues/HessenbergDecomposition.h
parent6ce22a61b3a2560a5464b368bee64555645da59f (diff)
Guard with assert against using decomposition objects uninitialized.
Diffstat (limited to 'Eigen/src/Eigenvalues/HessenbergDecomposition.h')
-rw-r--r--Eigen/src/Eigenvalues/HessenbergDecomposition.h29
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