lammouch Posté(e) le 3 mars 2008 Partager Posté(e) le 3 mars 2008 bonjour, je voudrais savoir comment on pourra augmenter la vitesse de ce code suivant: dprime=power(d,3); nprime=power(n,3); MIN=min(F(:,2)); for i=1:1:dprime for j=1:1:nprime S=sqrt((F(i,1)-D(j,1))^2+(F(i,2)-D(j,2))^2+(F(i,3)-D(j,3))^2); Sprime=S./a; if real( S)<=c h=8.63*sqrt(1-power(Sprime,2)); t=power((1-Sprime.^2),M); b=abs((real(besseli(m,h))./real((besseli(m,alpha)))).*real(t)); V(d+(MIN-F(i,2))/u,d+(MIN+F(i,1))/u,d+(MIN+F(i,3))/u)= V(d+(MIN-F(i,2))/u,d+(MIN+F(i,1))/u,d+(MIN+F(i,3))/u)+ Q(j,1)*b; else V(d+(MIN-F(i,2))/u,d+(MIN+F(i,1))/u,d+(MIN+F(i,3))/u)= V(d+(MIN-F(i,2))/u,d+(MIN+F(i,1))/u,d+(MIN+F(i,3))/u); end end end je pense qu'il sera possible d'obtenir une reponse rapide en remplacant les boucles for par un calcul matriciel(matrice 3D) mais je ne sais pas comment.. merci de m'aider le plus viote possible:) Lama. Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 3 mars 2008 Partager Posté(e) le 3 mars 2008 réponse courte : j'ai de sérieux doutes vu que tu as un test dans ta boucle... réponse longue : peut-être qu'il est possible de réorganiser la boucle et de l'exploser en plusieurs morceau, puis de trouver une restructuration des donénes qui se prêteraient à une optimisation. Par exemple, plutôt que d'avoir une matrice D de dimension (n, 3), imaginons trois matrices D1, D2 et D3 de dimension (m,n) étant le résultat de ones(m, 1)*D(:, 1)' (pour D1) - en gros, une matrice qui contient D(:, 1)' répliqué sur m lignes (m longueur de F). pareil pour F, mais dans l'autre sens (trois matrices répliqué sur n colones) on peut alors obtenir une matrice de S de dimension (m, n). Si je ne me trompe pas (je fais ça en live, là, vérifie bien les calculs) S = sqrt( (F1.-D1))^2 + (F2.-D2)^2 + (D3.-D2)^2 ) ./ a; peut-être que ça eaccélérera les calculs... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.