MATLAB performance HELP
q.bruneau
Messages postés
12
Date d'inscription
Statut
Membre
Dernière intervention
-
q.bruneau -
q.bruneau -
Bonjour,
je développe un programme sous matlab, qui effectue un certain (énorme) nombre de calculs.
Mon problème est le temps d'exécution du programme. D'après le profiler, la partie du code qui prend le plus de temps (le temps d'exécution du reste du code est négligeable) est celle-ci :
for i=2:imax
I_indice_pos = Premier_I + (i-1)*pas_I;
I_plot_pos(i) = I_indice_pos;
for j=2:jmax
J_indice_pos = Premier_J + (j-1)*pas_J;
J_plot_pos(j) = J_indice_pos;
for k=1:n_time
if (J_em_mes(k) >J_indice_pos - pas_I / 2)... %(profiler: time: 12.56s calls: 218929497)
&&(J_em_mes(k) <=J_indice_pos + pas_J / 2)...
&&(I_em_est(k) > I_indice_pos - pas_I / 2)...
&&(I_em_est(k) <= I_indice_pos + pas_I / 2)
Mat_occurence_pos(i,j) = Mat_occurence_pos(i,j) + 0.1;
end
end
end
end
Auriez-vous une idée qui me permettrait d'améliorer cette partie?
Sachant que dans le cas idéal (pas le plus fin), Imax = 200 et Jmax = 12000 et n_time = 35000
Je vous laisse imaginer le nombre de calculs, sachant que j'ai deux fois cette partie de code dans mon programme!
Je vous remercie par avance.
Quentin Bruneau
je développe un programme sous matlab, qui effectue un certain (énorme) nombre de calculs.
Mon problème est le temps d'exécution du programme. D'après le profiler, la partie du code qui prend le plus de temps (le temps d'exécution du reste du code est négligeable) est celle-ci :
for i=2:imax
I_indice_pos = Premier_I + (i-1)*pas_I;
I_plot_pos(i) = I_indice_pos;
for j=2:jmax
J_indice_pos = Premier_J + (j-1)*pas_J;
J_plot_pos(j) = J_indice_pos;
for k=1:n_time
if (J_em_mes(k) >J_indice_pos - pas_I / 2)... %(profiler: time: 12.56s calls: 218929497)
&&(J_em_mes(k) <=J_indice_pos + pas_J / 2)...
&&(I_em_est(k) > I_indice_pos - pas_I / 2)...
&&(I_em_est(k) <= I_indice_pos + pas_I / 2)
Mat_occurence_pos(i,j) = Mat_occurence_pos(i,j) + 0.1;
end
end
end
end
Auriez-vous une idée qui me permettrait d'améliorer cette partie?
Sachant que dans le cas idéal (pas le plus fin), Imax = 200 et Jmax = 12000 et n_time = 35000
Je vous laisse imaginer le nombre de calculs, sachant que j'ai deux fois cette partie de code dans mon programme!
Je vous remercie par avance.
Quentin Bruneau
A voir également:
- MATLAB performance HELP
- Diagnostic de performance énergétique - Accueil - Maison
- Test performance pc - Guide
- Test performance pc gratuit - Accueil - Utilitaires
- Mode performance - Guide
- Voir performance pc - Guide
4 réponses
Salut.
Je ne voi rien de délirant dans le programme;
Tu peux essayer de réfléchir à simplifier les calculs booléen pour les faire sous forme matricielle. genre :
Mat_occurence_pos + 0.1*(J_em_mes>J_indice_pos - pas_I / 2)&&(J_em_mes <=J_indice_pos + pas_J / 2)...
Mais ce n'est pas évident, car il faut bien conditionner les matrices types J_indice_pos et pas_I
Je ne voi rien de délirant dans le programme;
Tu peux essayer de réfléchir à simplifier les calculs booléen pour les faire sous forme matricielle. genre :
Mat_occurence_pos + 0.1*(J_em_mes>J_indice_pos - pas_I / 2)&&(J_em_mes <=J_indice_pos + pas_J / 2)...
Mais ce n'est pas évident, car il faut bien conditionner les matrices types J_indice_pos et pas_I