How to perform inverse between a page of a 3D matrix and a column vector without loops?

The matrix H looks like 9 x 2 x 14 and matrix A1 is 9 x1. I need to perform inversion between every page of H with A using mldivide so that output looks like 2 x 1 x14 matrix. No loops.
clear all;
close all;
load H.mat
load A1.mat

 Accepted Answer

Why do you insist to do this without looping? If you have been told "for loops in MATLAB are slow" that is not necessarily the truth anymore.
But in this particular case it is possible to use pagemldivide to accomplish this task.

More Answers (1)

load H.mat
load A1.mat
size(H)
ans = 1×3
9 2 14
size(A1)
ans = 1×2
9 1
answer = H.\A1;
size(answer)
ans = 1×3
9 2 14

3 Comments

Hi,
Thanks for the reply.
But It looks wrong, as the output should be 2 x 1 x 14. Every page of H is 9 x 2 and A1 is 9 x 1. So when inverse is made it boils down to 2 x 1 . So therefore the output matrux looks like 2 x 1 x 14.
Ah, I see. I misread the output. So, you need to vectorize this:
load H.mat
load A1.mat
size(H)
ans = 1×3
9 2 14
size(A1)
ans = 1×2
9 1
for ii = 1:size(H,3)
answer(:,:,ii) =H(:,:,ii)\A1;
end
size(answer)
ans = 1×3
2 1 14
Hi Kelly,
The output is correct, but I dont want to use a loop. Is there any possibility without looping?

Sign in to comment.

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!