SparseLU determinant computes wrong/partial values

Submitted by Daniel Stöckel

Assigned to Nobody

Link to original bugzilla bug (#810)
Version: 3.2

Description

Created attachment 462
Small C++ program reproducing the bug

I am running on Ubuntu 12.04.4. Using Eigen 3.2.1 and current trunk (9aa3dc4e) the computation of a determinant using the SparseLU module is broken for my small test case.

Given the Matrix:

2 -1
-1 2

SuperLU::absDeterminant() computes 2, where the expected output should be 3.
Solving linear equations using SuperLU::solve works without problems.

I investigated as far as MappedSuperNodalMatrix::InnerIterator, which seem to skip the last diagonal entries, as m_rowind(_colptr) does not have an appropriate entry:

m_nzval_colptr 0 2 4
m_nzval 2 -0.5 -1 -1.5

m_rowind_colptr 0 2 2
m_rowind 0 1 1

I have attached a small test case that reproduces the problem.

Addendum: make check on trunk produces three failures for me:

    362 - eigensolver_generic_2 (OTHER_FAULT)  
    622 - mpreal_support (OTHER_FAULT)  
    651 - levenberg_marquardt (OTHER_FAULT)  

Attachment 462, "Small C++ program reproducing the bug":
sparselu_bug.cpp

Blocking

#558 (closed)

Edited by Eigen Bugzilla