mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-08-12 19:59:05 +08:00
enable some tests that have been commented out
This commit is contained in:
parent
434817164e
commit
3c00e3da03
@ -57,10 +57,27 @@ template<typename Scalar> void sparse_ldlt(int rows, int cols)
|
|||||||
else
|
else
|
||||||
std::cerr << "warning LDLT failed\n";
|
std::cerr << "warning LDLT failed\n";
|
||||||
|
|
||||||
// VERIFY_IS_APPROX(refMat2.template selfadjointView<Upper>() * x, b);
|
VERIFY_IS_APPROX(refMat3.template selfadjointView<Upper>() * x, b);
|
||||||
VERIFY(refX.isApprox(x,test_precision<Scalar>()) && "LDLT: default");
|
VERIFY(refX.isApprox(x,test_precision<Scalar>()) && "LDLT: default");
|
||||||
|
|
||||||
|
#ifdef EIGEN_CHOLMOD_SUPPORT
|
||||||
|
{
|
||||||
|
x = b;
|
||||||
|
SparseLDLT<SparseSelfAdjointMatrix, Cholmod> ldlt2(m3);
|
||||||
|
if (ldlt2.succeeded())
|
||||||
|
{
|
||||||
|
ldlt2.solveInPlace(x);
|
||||||
|
VERIFY_IS_APPROX(refMat3.template selfadjointView<Upper>() * x, b);
|
||||||
|
VERIFY(refX.isApprox(x,test_precision<Scalar>()) && "LDLT: cholmod solveInPlace");
|
||||||
|
|
||||||
|
x = ldlt2.solve(b);
|
||||||
|
VERIFY_IS_APPROX(refMat3.template selfadjointView<Upper>() * x, b);
|
||||||
|
VERIFY(refX.isApprox(x,test_precision<Scalar>()) && "LDLT: cholmod solve");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
std::cerr << "warning LDLT failed\n";
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// new Simplicial LLT
|
// new Simplicial LLT
|
||||||
|
|
||||||
@ -144,28 +161,7 @@ template<typename Scalar> void sparse_ldlt(int rows, int cols)
|
|||||||
// VERIFY_IS_APPROX(refMat2.template selfadjointView<Upper>() * x, b);
|
// VERIFY_IS_APPROX(refMat2.template selfadjointView<Upper>() * x, b);
|
||||||
// VERIFY(refX.isApprox(x,test_precision<Scalar>()) && "LDLT: default");
|
// VERIFY(refX.isApprox(x,test_precision<Scalar>()) && "LDLT: default");
|
||||||
|
|
||||||
#ifdef EIGEN_CHOLMOD_SUPPORT
|
|
||||||
// x = b;
|
|
||||||
// SparseLDLT<SparseSelfAdjointMatrix, Cholmod> ldlt2(m2);
|
|
||||||
// if (ldlt2.succeeded())
|
|
||||||
// ldlt2.solveInPlace(x);
|
|
||||||
// else
|
|
||||||
// std::cerr << "warning LDLT failed\n";
|
|
||||||
//
|
|
||||||
// VERIFY_IS_APPROX(refMat2.template selfadjointView<Upper>() * x, b);
|
|
||||||
// VERIFY(refX.isApprox(x,test_precision<Scalar>()) && "LDLT: cholmod solveInPlace");
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// SparseLDLT<SparseSelfAdjointMatrix, Cholmod> ldlt3(m2);
|
|
||||||
// if (ldlt3.succeeded())
|
|
||||||
// x = ldlt3.solve(b);
|
|
||||||
// else
|
|
||||||
// std::cerr << "warning LDLT failed\n";
|
|
||||||
//
|
|
||||||
// VERIFY_IS_APPROX(refMat2.template selfadjointView<Upper>() * x, b);
|
|
||||||
// VERIFY(refX.isApprox(x,test_precision<Scalar>()) && "LDLT: cholmod solve");
|
|
||||||
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void test_sparse_ldlt()
|
void test_sparse_ldlt()
|
||||||
|
@ -44,7 +44,6 @@ template<typename Scalar> void sparse_lu(int rows, int cols)
|
|||||||
std::vector<Vector2i> zeroCoords;
|
std::vector<Vector2i> zeroCoords;
|
||||||
std::vector<Vector2i> nonzeroCoords;
|
std::vector<Vector2i> nonzeroCoords;
|
||||||
|
|
||||||
static int count = 0;
|
|
||||||
SparseMatrix<Scalar> m2(rows, cols);
|
SparseMatrix<Scalar> m2(rows, cols);
|
||||||
DenseMatrix refMat2(rows, cols);
|
DenseMatrix refMat2(rows, cols);
|
||||||
|
|
||||||
@ -61,6 +60,21 @@ template<typename Scalar> void sparse_lu(int rows, int cols)
|
|||||||
x.setZero();
|
x.setZero();
|
||||||
// // SparseLU<SparseMatrix<Scalar> > (m2).solve(b,&x);
|
// // SparseLU<SparseMatrix<Scalar> > (m2).solve(b,&x);
|
||||||
// // VERIFY(refX.isApprox(x,test_precision<Scalar>()) && "LU: default");
|
// // VERIFY(refX.isApprox(x,test_precision<Scalar>()) && "LU: default");
|
||||||
|
|
||||||
|
#ifdef EIGEN_UMFPACK_SUPPORT
|
||||||
|
{
|
||||||
|
// check solve
|
||||||
|
x.setZero();
|
||||||
|
SparseLU<SparseMatrix<Scalar>,UmfPack> lu(m2);
|
||||||
|
VERIFY(lu.succeeded() && "umfpack LU decomposition failed");
|
||||||
|
VERIFY(lu.solve(b,&x) && "umfpack LU solving failed");
|
||||||
|
VERIFY(refX.isApprox(x,test_precision<Scalar>()) && "LU: umfpack");
|
||||||
|
VERIFY_IS_APPROX(refDet,lu.determinant());
|
||||||
|
// TODO check the extracted data
|
||||||
|
//std::cerr << slu.matrixL() << "\n";
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef EIGEN_SUPERLU_SUPPORT
|
#ifdef EIGEN_SUPERLU_SUPPORT
|
||||||
{
|
{
|
||||||
x.setZero();
|
x.setZero();
|
||||||
@ -85,24 +99,7 @@ template<typename Scalar> void sparse_lu(int rows, int cols)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#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";
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
#endif
|
|
||||||
count++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void test_sparse_lu()
|
void test_sparse_lu()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user