# Combine two different matrices to create one new matrix of all matrix combinations

11 views (last 30 days)
Andrew Alkiviades on 11 May 2012
Hi, I have the following matrices
WT_energy_supply(:,:,M) and PV_power_output(:,:,K)
which are 365 x 24 matrices and M = 3 and K = 10. Therefore there are 30 possible combinations of WY_energy_supply and PV_power_output. I am looking to create a set of matrices (in the form (:,:,Z)) that add corresponding elements in each matrix to form this new set (again 365x24 with 30 different matrices) Does anyone have any idea where to start coding this?
Thank you

Sean de Wolski on 11 May 2012
Nice brain teaser!
%Sample data:
A = ones(4,4,5);
B = bsxfun(@times,ones(4,4,3),cat(3,1,2,3));
%Nice to know:
sz = size(B);
%Engine:
C = reshape(bsxfun(@plus,A, reshape(B,sz(1),sz(2),1,sz(3))),sz(1),sz(2),[]);
Andrew Alkiviades on 12 May 2012
@Sean
Still a bit confused on how to code "C" to take the form
C(:,:,Z) = ...

Andrei Bobrov on 11 May 2012
eg:
M = 3;
K = 10;
WT_energy_supply = randi(10,10,4,M);
PV_power_output = randi([10 50],10,4,K);
%solution
ij = fullfact([M K]);
out = WT_energy_supply(:,:,ij(:,1)) + PV_power_output(:,:,ij(:,2)) ;
Sean de Wolski on 11 May 2012
That's what bsxfun does for you!
think about it, how can you add two things that are different sizes?

owr on 11 May 2012
To generate all combinations of K and M, check out the file exchange function "allcomb": href=""<http://www.mathworks.com/matlabcentral/fileexchange/10064</a>>
Ive been using it for years, works with more than 2 parameters as well.