mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-06-04 18:54:00 +08:00
Fix bug #894: the sign of LDLT was not re-initialized at each call of compute()
This commit is contained in:
parent
8838b0a1ff
commit
d04f23260d
@ -433,6 +433,7 @@ LDLT<MatrixType,_UpLo>& LDLT<MatrixType,_UpLo>::compute(const MatrixType& a)
|
|||||||
m_transpositions.resize(size);
|
m_transpositions.resize(size);
|
||||||
m_isInitialized = false;
|
m_isInitialized = false;
|
||||||
m_temporary.resize(size);
|
m_temporary.resize(size);
|
||||||
|
m_sign = internal::ZeroSign;
|
||||||
|
|
||||||
internal::ldlt_inplace<UpLo>::unblocked(m_matrix, m_transpositions, m_temporary, m_sign);
|
internal::ldlt_inplace<UpLo>::unblocked(m_matrix, m_transpositions, m_temporary, m_sign);
|
||||||
|
|
||||||
|
@ -316,33 +316,35 @@ template<typename MatrixType> void cholesky_definiteness(const MatrixType& m)
|
|||||||
{
|
{
|
||||||
eigen_assert(m.rows() == 2 && m.cols() == 2);
|
eigen_assert(m.rows() == 2 && m.cols() == 2);
|
||||||
MatrixType mat;
|
MatrixType mat;
|
||||||
|
LDLT<MatrixType> ldlt(2);
|
||||||
|
|
||||||
{
|
{
|
||||||
mat << 1, 0, 0, -1;
|
mat << 1, 0, 0, -1;
|
||||||
LDLT<MatrixType> ldlt(mat);
|
ldlt.compute(mat);
|
||||||
VERIFY(!ldlt.isNegative());
|
VERIFY(!ldlt.isNegative());
|
||||||
VERIFY(!ldlt.isPositive());
|
VERIFY(!ldlt.isPositive());
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
mat << 1, 2, 2, 1;
|
mat << 1, 2, 2, 1;
|
||||||
LDLT<MatrixType> ldlt(mat);
|
ldlt.compute(mat);
|
||||||
VERIFY(!ldlt.isNegative());
|
VERIFY(!ldlt.isNegative());
|
||||||
VERIFY(!ldlt.isPositive());
|
VERIFY(!ldlt.isPositive());
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
mat << 0, 0, 0, 0;
|
mat << 0, 0, 0, 0;
|
||||||
LDLT<MatrixType> ldlt(mat);
|
ldlt.compute(mat);
|
||||||
VERIFY(ldlt.isNegative());
|
VERIFY(ldlt.isNegative());
|
||||||
VERIFY(ldlt.isPositive());
|
VERIFY(ldlt.isPositive());
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
mat << 0, 0, 0, 1;
|
mat << 0, 0, 0, 1;
|
||||||
LDLT<MatrixType> ldlt(mat);
|
ldlt.compute(mat);
|
||||||
VERIFY(!ldlt.isNegative());
|
VERIFY(!ldlt.isNegative());
|
||||||
VERIFY(ldlt.isPositive());
|
VERIFY(ldlt.isPositive());
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
mat << -1, 0, 0, 0;
|
mat << -1, 0, 0, 0;
|
||||||
LDLT<MatrixType> ldlt(mat);
|
ldlt.compute(mat);
|
||||||
VERIFY(ldlt.isNegative());
|
VERIFY(ldlt.isNegative());
|
||||||
VERIFY(!ldlt.isPositive());
|
VERIFY(!ldlt.isPositive());
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user