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 endend
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 convolutiontmp= ifft(tmp, 'symmetric');dRad_dt(2:n,:) = tmp(1:n-1,:);