Aller au contenu

optimisation de la vitesse en matlab


Messages recommandés

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

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

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...