Backslash with triangular matrices
3 views (last 30 days)
Show older comments
I'm using a LU decomposition on a matrix A (square, sparse, complex, symmetric (not Hermitian)):
[M1,M2,P,Q,R] = lu(A);
I then apply the backslash operator to these resulting matrices to build a Schur complement:
T = Q*(M2\(M1\(P*(R\B))));
If B were a vector, this second line executes sufficiently fast. But when B is a square matrix, which it is in my case, this operation is very slow since Matlab internally loops through the columns of B (which is my conclusion after having done some tic/tocs). The second line of code runs on a single thread using Matlab 2013b on Win7 64bit which makes this even slower.
What is a good way of speeding this up? A parfor loop working on the columns of B didn't work for me in Matlab 2013b due to reasons discussed in http://www.mathworks.com.au/matlabcentral/answers/59250-error-with-parfor-and-big-matrices (despite Edric Ellis saying it had been fixed in 2013a). Anything else I can try?
Thanks!
2 Comments
Accepted Answer
Matt J
on 17 Dec 2013
Edited: Matt J
on 17 Dec 2013
Your operation looks equivalent to
T=A\B
I would expect that to be the fastest. Note that backslash already does its own lu decomposition internally, but with optimized multi-threading. You seem to be just repeating the decomposition work. Moreover, you've turned one backslash operation into three, possibly triggering three times as many internal lu decompositions.
8 Comments
Matt J
on 20 Dec 2013
Although, I'm still curious to learn whether memmapfile and SPMD can be made working together.
Not sure why they wouldn't, but you might try MATFILE instead of MEMMAPFILE.
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!