How can I get rid of the 2 nested for loops for my calculations which include a 3D matrix and a 2D matrix.
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Ricardo Shousha
el 4 de Ag. de 2017
Comentada: Matt J
el 4 de Ag. de 2017
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
0 comentarios
Respuesta aceptada
Matt J
el 4 de Ag. de 2017
Editada: Matt J
el 4 de Ag. de 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 comentarios
Matt J
el 4 de Ag. de 2017
You're right. It should be
P=reshape(P,[],3)*W;
P=reshape(P,8,8,3);
Más respuestas (0)
Ver también
Categorías
Más información sobre Creating and Concatenating Matrices en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!