Sometime we need to solve a bunch of small linear (least-square) systems of the same size. This function can accomplish this task conveniently.
The system matrix and RHS are passed as 3D arrays.
Furthermore, calling syntax can support two simplifications:
- same RHS for all systems; or
- single RHS for each system.
Followed an idea from Tim Davis (using sparse)
Bruno Luong (2021). Multiple same-size linear solver (https://www.mathworks.com/matlabcentral/fileexchange/24260-multiple-same-size-linear-solver), MATLAB Central File Exchange. Retrieved .
If the first two dimensions are equal as I said, it won't matter. however, in general, you are right. Thanks again.
@Ashraf I believe it should be
MSOL = reshape(MSOL, [sx(2) sy(2) sx(3:dx)]);
Thank you very much. I modified it a little bit to work for any number of dimensions, considering the first two dimensions are of the same size, as shown below.
sx = size(M);
sy = size(RHS);
dx = ndims(M);
MSOL = reshape(MSOL, [sx(1) sy(2) sx(3:dx)]);
@Ashraf: reshape your M to (5x5x36), solve the multiple linear systems then reshape back
X = MultiSolver(reshape(M,5,5,), RHS)
X = reshape(X,[5 1 2 3 6])
Amazing solver! Can I extend SliceMultiSolver to solve an n-dim matrix where n is 1,2,3,4,5,.....?
For eample, If I have M=rand (5,5,2,3,6) and RHS=[0;0;0;0;1];, can I modify it slightly so that it can solve it?
Thanks for this file, shedding light to me on this kind of problems!
It is early a great function.
Thanks for sharing.
I tried your function on a large array (eg. 5*5*1000000), it occupies too much memory. It will take at least 5 times memory as the initial data package. And most of the memory cost is to store the sparse indexes. Is there any way to reduce the memory consuming? Thanks!
Find the treasures in MATLAB Central and discover how the community can help you!Start Hunting!