disable broken determinant for complexes and SuperLU

This commit is contained in:
Gael Guennebaud 2011-01-28 16:30:21 +01:00
parent 6f2ba1f52b
commit c478e0039e
2 changed files with 18 additions and 17 deletions

View File

@ -630,6 +630,7 @@ void SparseLU<MatrixType,SuperLU>::extractData() const
template<typename MatrixType>
typename SparseLU<MatrixType,SuperLU>::Scalar SparseLU<MatrixType,SuperLU>::determinant() const
{
assert((!NumTraits<Scalar>::IsComplex) && "This function is not implemented for complex yet");
if (m_extractedDataAreDirty)
extractData();
@ -647,7 +648,7 @@ typename SparseLU<MatrixType,SuperLU>::Scalar SparseLU<MatrixType,SuperLU>::dete
det *= m_u._valuePtr()[lastId];
}
}
// std::cout << m_sluRscale[j] << " " << m_sluCscale[j] << " ";
// std::cout << m_sluRscale[j] << " " << m_sluCscale[j] << " \n";
}
return det;
}

View File

@ -79,28 +79,28 @@ template<typename Scalar> void sparse_lu(int rows, int cols)
VERIFY(b.isApprox(m2.adjoint() * x, test_precision<Scalar>()));
}
if (count==0) {
if (!NumTraits<Scalar>::IsComplex) {
VERIFY_IS_APPROX(refDet,slu.determinant()); // FIXME det is not very stable for complex
}
}
}
#endif
#ifdef EIGEN_UMFPACK_SUPPORT
{
// check solve
x.setZero();
SparseLU<SparseMatrix<Scalar>,UmfPack> slu(m2);
if (slu.succeeded()) {
if (slu.solve(b,&x)) {
if (count==0) {
VERIFY(refX.isApprox(x,test_precision<Scalar>()) && "LU: umfpack"); // FIXME solve is not very stable for complex
}
}
VERIFY_IS_APPROX(refDet,slu.determinant());
// TODO check the extracted data
//std::cerr << slu.matrixL() << "\n";
}
}
// {
// // check solve
// x.setZero();
// SparseLU<SparseMatrix<Scalar>,UmfPack> slu(m2);
// if (slu.succeeded()) {
// if (slu.solve(b,&x)) {
// if (count==0) {
// VERIFY(refX.isApprox(x,test_precision<Scalar>()) && "LU: umfpack"); // FIXME solve is not very stable for complex
// }
// }
// VERIFY_IS_APPROX(refDet,slu.determinant());
// // TODO check the extracted data
// //std::cerr << slu.matrixL() << "\n";
// }
// }
#endif
count++;
}