Optimisation d'une boucle en Matlab
Résolu
Bonjour,
Je sais que c'est mal d'utiliser les boucles en Matlab, mais je n'ai pas eu le choix. J'utilise cette boucle pour manipuler de grosses matrices (360,180,52).
for freq=1:52
for i=1:360
for j=1:180
A(i,j,freq)=10*log10(10^((B(i,j,freq))/10)+10^(C(i,j,freq)/10));
end
end
end
Je dois donc additionner 2 matrices en dB, en les linéarisant, puis repasser en dB.
Ce calcul est très couteux en temps.
L'idéal serait d'avoir une fonction matlab qui permette d'élever un nombre à une puissance qui serait l'élément d'une matrice, du genre :
10^M (je sais que c'est une aberration).
Sinon, quelqu'un pourrait me dire comment optimiser cette boucle, ou carrément l'éviter?
Merci !
Je sais que c'est mal d'utiliser les boucles en Matlab, mais je n'ai pas eu le choix. J'utilise cette boucle pour manipuler de grosses matrices (360,180,52).
for freq=1:52
for i=1:360
for j=1:180
A(i,j,freq)=10*log10(10^((B(i,j,freq))/10)+10^(C(i,j,freq)/10));
end
end
end
Je dois donc additionner 2 matrices en dB, en les linéarisant, puis repasser en dB.
Ce calcul est très couteux en temps.
L'idéal serait d'avoir une fonction matlab qui permette d'élever un nombre à une puissance qui serait l'élément d'une matrice, du genre :
10^M (je sais que c'est une aberration).
Sinon, quelqu'un pourrait me dire comment optimiser cette boucle, ou carrément l'éviter?
Merci !
4 réponses
-
J'aurais fais pareil ^^
-
Donc pour toi ce n'est pas possible de prendre les éléments d'une matrice comme puissance?
-
Ce que j'aimerais faire c'est effectuer une opération directement sur la matrice sans avoir recours aux boucles for. Par exemple, pour faire une multiplication élément par élément on fait M.*N.
Je voudrais faire la même chose pour la puissance, ca m'économiserait du temps de calcul. -
Simple et efficace, tellement simple que j'y avais pas pensé. Trop la honte! ^^
Merci en tout cas, mon programme tourne 8 fois plus vite. C'est excellent!