MATLAB: How to vectorize this for-loop

for loopvetorization

Hi,
I have the following loop that is called lots of times within a function and is slowing down considerably
n=200;
F1=rand(n,4);
F2=rand(n,4);
dRad_dt=zeros(n,4)
for i=1:4
for j=1:n
for k=1:n
if j+k<=n
dRad_dt(j+k,i)=dRad_dt(j+k,i)+F1(j,i)*F2(k,i);
end
end
end
end
Any clues on how to vectorize this code or speed up considerably would be greatly appreciated

Best Answer

You've re-invented convolution,
dRad_dt=zeros(n,4);
tmp = fft(F1,2*n,1).*fft(F2,2*n,1); %fft-based convolution
tmp= ifft(tmp, 'symmetric');
dRad_dt(2:n,:) = tmp(1:n-1,:);
Related Question