MATLAB: Nested loops/vect​orization/​array indexing

indexingnested loopsvectorization

Hello,
I am currently working with a series of nested loops where an array is modified upon each loop and each loop iteration depends on the index of different variables. Here is an example:
for jj = 1:J %Loop over Y variables
for ii = 1:I %Loop over X variables
for l = 1:Nm %Loop for each value of l
m = mod(l-1,M+1);
n = floor((l-1)/(M+1));
S(l,ii,jj) = cos(m*pi*X(ii)/Lx)*cos(n*pi*Y(jj)/Ly);
end
end
end
The problem I am having is how to vectorize this computation to improve speed. Note that X and Y are coordinates in 2-d. Is it possible to improve this so that it can be performed more quickly?
Thanks

Best Answer

l = (1:Nm).' - 1;
M = M + 1;
S = bsxfun(@times,cos(pi*mod(l,M)*X.'/Lx),...
cos(pi*bsxfun(@times,floor(l/M),permute(Y,[3 2 1]))/Ly));
edit
l = (1:Nm).' - 1;
M = M + 1;
S = bsxfun(@times,cos(pi*mod(l,M)*X(:).'/Lx),...
cos(pi*bsxfun(@times,floor(l/M),reshape(Y,1,1,[]))/Ly));