Backslash with triangular matrices
5 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Herwig
el 13 de Dic. de 2013
Comentada: Matt J
el 20 de Dic. de 2013
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 comentarios
Respuesta aceptada
Matt J
el 17 de Dic. de 2013
Editada: Matt J
el 17 de Dic. de 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 comentarios
Matt J
el 20 de Dic. de 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.
Más respuestas (0)
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!