Registered Member
|
I have a large, sparse indefinite matrix; when I do an LDL' decomposition, one of the elements of D is highly negative. I would like to compute a modified Cholesky decomposition that adjusts the elements such that LDL' is positive definite. However, all of the available algorithms (e..g, Gill-Murray, Schnabel-Eskow) are designed for dense matrices. And so, I am stuck.
Ideally, I would like to find an efficient method of modifying the output of SimplicialLLT such that all of the elements of D are positive, and that P'LDL'P is reasonably close to the original matrix. Alternatively, I would try to adapt the existing code to create a "modified SimplicialLLT" function. But my knowledge of these algorithms, and how Eigen estimates them internally, is introductory at best. So I am hoping someone reading this post has some ideas. Thanks in advance for any suggestions. Michael |
Moderator
|
The Simplicial* classes already allows for shifting the diagonal elements:
http://eigen.tuxfamily.org/dox-devel/cl ... fc0a95da7c Adapting the code to make the shifting more adaptive like GMW81 should not be difficult. Look at the line 744 to see where the shift is applied. Please get back to us if you manage to get something working. It might be interesting to have it upstream. |
Registered Member
|
Thanks for the response. Unfortunately, after several hours of staring at the code today, I am have having some trouble reconciling the sparse simplicial code in Eigen with the "standard" non-sparse modified Cholesky algorithms. I will probably need more hand-holding in understanding the inner workings of the Eigen code before I can proceed, or wait until I have a few free days to really get into it.
|
Moderator
|
feel free to ask questions, but please be as specific as possible.
|
Registered users: Bing [Bot], claydoh, Google [Bot], rblackwell, Yahoo [Bot]