Registered Member
|
Hi all,
I am currently facing an issue with regards to numerical efficiency in my code and would like to get suggestions. Here goes-: I am working on an iterative algorithm which requires me to solve A*D*A^T * X = M at every iteration, where A is a sparse (~0.05% non zero entries) full row rank rectangular matrix (10K * 12K) and D is a diagonal matrix(12K). The matrix A*D*A^T has only 2% non zero entries. Diagonal matrix D changes across iterations, also M changes. 1. Currently I compute a sparse cholesky factorization(SimplicialLLT) of A*D*A^T and then use it to solve X in A*D*A^T * X= M. Any suggestions (mathematically or code wise) for solving the system where I can leverage the fact that matrix A is constant across iterations and D is just diagonal. M is a relatively smaller matrix, so that changing does not worry me too much. PS-: I have already tried analyePattern() method in SimplicialLLT, but that does not seem to make a huge difference. Thanks, Jayanth
Last edited by jmogali on Fri Sep 11, 2015 9:16 pm, edited 2 times in total.
|
Moderator
|
I guess you meant, solving for: A*D*A^T * X = M ?
This ressemble to a weighted least-square solve, so perhaps it would be possible to do something with SparseQR to perform a QR factorization of the rectangular matrix A^T only once and then see how to re-introduce the weights in the solve step. |
Registered users: Bing [Bot], Google [Bot], q.ignora, watchstar