How can I get rid of the 2 nested for loops for my calculations which include a 3D matrix and a 2D matrix.

3 visualizzazioni (ultimi 30 giorni)
So, To give a tiny bit of context: I am working on an interacting multi-model Kalmanfilter for event-detection.
The system has 8 state-variables, and I use 3 models. Therefore, My EEC matrix P is an (8x8x3) matrix. The other variable is a weighting matrix W (2D) of size (3x3).
What do I want to do? --> I want to update P(:,:,i) for all 3 models, so that the 8x8 values of that particular model are scaled by the same weight. I currently implemented this as 2 nested for-loops:
for i=1:Nmodel
for j=1:Nmodel
Pmix(:,:,i) = Pmix(:,:,i) + Wmix(j,i)*(Ppost(:,:,j)); ... % Mixed EECs as weighted average
end
end
So to be clear: If
W = [W11, W12, W13; W21, W22, W23; W31,W32,W33], the following multiplications need to happen:
P(:,:,1) = W11*P(:,:,1) + W21*P(:,:,2) + W31*P(:,:3);
P(:,:,2) = W12*P(:,:,1) + W22*P(:,:,2) + W32*P(:,:3);
P(:,:,3) = W13*P(:,:,1) + W23*P(:,:,2) + W33*P(:,:3);
Please let me know whether it is possible to get rid of the for-loops and only use matrix multiplications?
This would hopefully speed up the Real-Time implementation. Thanks in Advance!
NOTE: The solution has to work in MATLAB r2015a due to contraints with regards to implementation on RT control system. Regards, Ricardo

Risposta accettata

Matt J
Matt J il 4 Ago 2017
Modificato: Matt J il 4 Ago 2017
Yes, it's pretty easy to formulate it as as a matrix multiplication (plus some reshaping)
P=reshape(P,[],3)*W.';
P=reshape(P,8,8,3);
  2 Commenti
Ricardo Shousha
Ricardo Shousha il 4 Ago 2017
Thanks a lot for your help. I think you meant just W and not its transpose, as the non-transposed W yields the "correct" multiplications. The only thing still missing is that the Previous P has to be added, but I think I can work that out myself.
Thanks again for showing me this reshape method.
Ricardo

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Creating and Concatenating Matrices in Help Center e File Exchange

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by