I am working on an iterative algorithm which requires me to solve A*D*A^T * X = M, where A is a sparse full row rank rectangular matrix (10K * 12K) and D is a diagonal matrix(12K). X is the unknown. The matrix A*D*A^T has only 2% non zero entries. Only matrices D and M change across iterations. My questions are the following-:
1. Currently I compute a cholesky factorization of A*D*A^T and then solve for X in A*D*A^T * X= M. Is there a more efficient manner to solve considering only diagonal matrix D changes across iterations and off course M.
2. Considering the dimensions of the problem can anyone recommend me good solvers in C++ or java or any other language which may have wrappers in c++ or java. I have already used Matrix toolkit java and c++ Eigen (sparse cholesky), but both are slow for my problem (on 3.6 GHz).