Can I calculate the inverse of a matrix using arrayfun?

1 次查看(过去 30 天)
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

采纳的回答

Walter Roberson
Walter Roberson 2021-6-25
编辑:Walter Roberson 2021-6-25
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 个评论
Benson Gou
Benson Gou 2021-6-29
Hi, Walter,
I do not have the Image Processing Toolbox. So I cannot run decompose(A).
But the goal that I want to obtain the inverse of A is becaus I need to find out the nonzero elements in invA. So I do not know if decompose(A) is able to be useful for my case.
Thanks a lot.
Benson

请先登录,再进行评论。

更多回答(1 个)

Sulaymon Eshkabilov
编辑:Sulaymon Eshkabilov 2021-6-25
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 个评论
Walter Roberson
Walter Roberson 2021-6-25
By the way, you cannot apply arrayfun() directly to a sparse matrix.
Benson Gou
Benson Gou 2021-6-29
Hi, Walter,
Yes, the decomposition is faster than \ operator. Thanks a lot.
Benson

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Linear Algebra 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by