2014-12-03 140 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