2014-12-03 109 views
1

我有一个2x2矩阵的NxN数组,我需要反转它们中的每一个。使用Matlab(或用户定义的函数),是否有办法做到这一点比循环遍历每一个并反转它更快?我可以假定他们都是可逆转的,并且条件良好。大量小矩阵的快速反演

例如:

% dim(A) = 2 x 2 x N x N 
I = eye(2); 
for i = 1:N 
for j = 1:N 
    exphl(:, :, i, j) = expm(A(:, :, i, j)); 
    for k = 1:M 
     z = r(k); %constants 
     zIA = (z*I-A)\I; 
     exphL1(:, :, i, j) = exphL1(:, :, i, j) + dt*zIA*(exp(z/2)-1); 
    end 
end 
end 

作为一个侧面说明,任何人都可以告诉我为什么剖析说,最后一行“exphL1(...”?花费时间最多的

+1

有一个用户定义的函数可以完成这个[link](http://www.mathworks.com/matlabcentral/fileexchange/31222 -inversion-each-2d-slice-for-arbitrary-multi-dimension-array /) – 5o3x 2014-12-03 10:04:23

回答

-2

有一个MATLAB函数可以完成这个工作:inv()。它可能比你的自定义循环更快。

+2

inv()在computi ng倒数比\ – 5o3x 2014-12-03 08:06:33

+0

看到[这个线程](http://stackoverflow.com/questions/1419580/why-is-matlabs-inv-slow-and-inaccurate)为什么你应该**不**使用'inv'。 – Shai 2014-12-03 08:15:38

+2

如果你想知道另一个问题的答案是否可信...... Loren知道她在说什么!至少比你更好,我和其他所有人。她从事MATLAB语言的设计工作,自2005年以来一直在撰写[关于MATLAB的博客文章](http://blogs.mathworks.com/loren/)。 – 2014-12-03 08:57:20