Can I calculate the inverse of a matrix using arrayfun?

1 view (last 30 days)
Benson Gou
Benson Gou on 25 Jun 2021
Commented: Benson Gou on 29 Jun 2021
Dear All,
I have a sparse matrix A. I want to calculate its inverse. I used the following way to calculate invA.
invA = A \ speye(size(A));
My matrix size is 3000 by 3000. I found it took me 1.3 seconds to get invA. It is longer than I expected.
I am wondering if I could use arrayfun to calculate invA. The idea is to calculate each column in invA by invA(:,i) = A \ ei, where ei is a zero column vector except its ith element is 1.0.
I tried the following code to implement the above idea:
invA = arrayfun(@(x) A\x ,speye(size(A,1)));
But I got error message.
Thanks a lot.
Benson
  1 Comment
Matt J
Matt J on 25 Jun 2021
I don't see how arrayfun could help, unless this is on the GPU.

Sign in to comment.

Accepted Answer

Walter Roberson
Walter Roberson on 25 Jun 2021
Edited: Walter Roberson on 25 Jun 2021
invA = cell2mat(arrayfun(@(C) A\sparse(C,1,1,size(A,1),1), 1:size(A,2), 'uniform', 0))
I would be surprised if it is faster.
  8 Comments

Sign in to comment.

More Answers (1)

Sulaymon Eshkabilov
Sulaymon Eshkabilov on 25 Jun 2021
Edited: Sulaymon Eshkabilov on 25 Jun 2021
In fact, you can employ arrayfun for the matric inverse calc, e.g.:
tic;
iA =arrayfun(@inv,A);
toc;
Note that arrayfun is not the best option and does not take the sparse matrix.
Just direct inv() is the fastest so far.
In fact, for solving linear systems, to compute the inverse is not advised.
  4 Comments
Benson Gou
Benson Gou on 29 Jun 2021
Hi, Walter,
Yes, the decomposition is faster than \ operator. Thanks a lot.
Benson

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!