Re: [eigen] Complex symmetric Cholesky factorization

[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]




On Thu, Aug 13, 2015 at 9:28 PM, John Daily <John.Daily@xxxxxxxxxxxxxxxxx> wrote:
Greetings, certain symmetric complex (non-Hermitian) matrices admit an LL^T/LDL^T factorization[1] (rather than an LL^H LDL^H). I am working with sparse matrices and the code changes to support this are minimal and are all encompassed in Simplicial_Cholesky_impl.h, in the factorize method, as well as the updated solve calling transpose rather than selfadjointView. I have two questions:

Yes we are aware of that and this has been a planed feature for a long time.
 
2) If so what would be an acceptable way to do this, that would not cause surprise to users? It would seem that a separate template parameter or even function call would make this explicit, such as instead of .factorize() calling .factorizeComplexSymmetric() or something. 

We already have a SelfAdjoint and Symmetric enums to distinguish between the two cases, so perhaps an idea would be to allow to pass Symmetric to the second template parameter, like:

[Simplicial]L[D]LT<MatrixType, {{Lower,Upper,Lower|Upper}[|Symmetric] , Symmetric}>

For consistency I'm including the dense factorizations here.

Actually, this solution is already the one we adopted for PardisoLLT<> and PardisoLDLT<>.

In a second time, for consistency, we should also add a symmetricView<>() method to [Sparse]MatrixBase<> returning a SelfAdjointView<...,{Upper,Lower}[|Symmetric]>. Likewise, we could also think about adding templated variants of adjoint() / selfadjointView() to ease writing generic code with true compile-time branches...


cheers,
gael


 



Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/