How to invert 3D matrices?

조회 수: 14 (최근 30일)
gsourop
gsourop 2016년 12월 15일
편집: James Tursa 2021년 7월 15일
Hi everyone,
I have a 3D matrix so A with dimensions 3x2x5 and I need to invert the following folmula inv(A'A). I need to transpose transpose(A(1,:,:), then transpose(A(2,:,:) and transpose(A(3,:,:) In case a inv(A) I can use the MultiSolver function in http://uk.mathworks.com/matlabcentral/fileexchange/24260-multiple-same-size-linear-solver, but how can I invert the product a transposed 3D matrix A with A? I have tried
inv_X_f=permute(MultiSolver(permute(X_f,[1 3 2]).*X_f,eye(3)),[1 2 3]);
Thanks in advance.
  댓글 수: 1
Walter Roberson
Walter Roberson 2016년 12월 15일
(A'A) is not defined for 3 dimensional A.

댓글을 달려면 로그인하십시오.

채택된 답변

James Tursa
James Tursa 2016년 12월 15일
편집: James Tursa 2021년 7월 15일
Step 1)
Get your 2D matrix pages into the 1st two dimensions. This makes each 2D page contiguous in memory and is somewhat of an unwritten standard for many other functions that operate on 2D pages. So:
Ap = permute(A,[2 3 1]);
Step 2)
Do the page multiplies with Ap using one of the following utilities. Note that some of these utilities require building a mex routine and thus need a C compiler installed. For methods that require the 2D transposes to be explicitly formed first, you could just use another permute. E.g.,
ApT = permute(A,[3 2 1]);
MULTIPROD:
MMX:
MTIMESX:
PAGEMTIMES:
Step 3)
Now you are ready to use Multisolver:
Long term, I would advise that you always have your 2D pages in the 1st two dimensions in all of your code. This avoids the necessity of doing all of those permutes which require the entire data set to be copied in memory.

추가 답변 (1개)

KSSV
KSSV 2016년 12월 15일
A=rand(3,2,5);
B=zeros(3,3,5);
for i = 1:5
B(:,:,i)=inv(A(:,:,i)*A(:,:,i)');
end

카테고리

Help CenterFile Exchange에서 Mathematics에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by