MATLAB: comment vectoriser cette boucle for

Salut,
J’ai la boucle suivante qui est appelée beaucoup de fois dans une fonction et qui ralentit considérablement
 
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
 
Tout indice sur la façon de vectoriser ce code ou d’accélérer considérablement serait grandement apprécié

Meilleure réponse

  • Vous avez réinventé la 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,:);