Boucle if avec somme

Fermé
sisima05 Messages postés 1 Date d'inscription samedi 11 juillet 2015 Statut Membre Dernière intervention 11 juillet 2015 - Modifié par KX le 11/07/2015 à 08:10
Timmydu26 Messages postés 80 Date d'inscription mercredi 29 avril 2015 Statut Membre Dernière intervention 17 juin 2016 - 15 juil. 2015 à 17:22
Bonjour,
je vous remerci d'abord d'avoir m'aider,
n=164;
for i=1:n
if A(i,1)>2015000
        S=A(i,7)
        s=sum(S)
  end
end

le probleme c'est que le nombre calculé n'est pas la somme que j'attends, normalement ça marche avec c++ ms avec matlab je ne sais pas ou est l'erreur, s'il vous plait aidez moi
merci


1 réponse

Timmydu26 Messages postés 80 Date d'inscription mercredi 29 avril 2015 Statut Membre Dernière intervention 17 juin 2016 30
15 juil. 2015 à 10:11
Que contient A?
Quels résultats tu attend?
0
A c'est une matrice de 164 ligne et 7 colonnes
j'attends la sommes des valeurs de la 7éme colonne de la iéme ligne qui vérifie la condition:
A(i,1)>2015000
0
Timmydu26 Messages postés 80 Date d'inscription mercredi 29 avril 2015 Statut Membre Dernière intervention 17 juin 2016 30
Modifié par Timmydu26 le 15/07/2015 à 17:25
Pour le moment tu parcourt chaque ligne de ta matrice.
Pour chaque ligne, si la valeur de la 1ere colonne et superieur a 2015000 tu recupere dans S la valeur de la 7eme colonne. Mais quand tu fait s=sum(S): tu dit que s vaut la somme des valeurs de S. MAIS tu as defini S comme etant une variable et non un tableau donc, c'est comme si tu avais directement écrit s=S.

Pour corriger tu peut faire comme ceci:
n=164;
S=zeros(n,1); % tu créér un vecteur rempli de zeros
for i=1:n
if A(i,1)>2015000
S(i)=A(i,7); % tu remplace le zeros par la valeur de la 7eme colonne pour chaque
%indice de ligne ou la 1ère colonne est superieur à 2015000
end
end
s=sum(S); % puis enfin tu fais la somme.

Sinon, de maniere plus simple tu doit pouvoir faire un truc du genre:
s= sum(A(:,7).*(A(:,1) > 2015000));
C'est à dire:
(A(:,1) > 2015000) te donne un vecteur rempli de 1 et de 0. la ligne est a 1 si la 1ere colonne rempli la condition >2015000.
si tu mutiplie ce vecteur sur la 7eme colonne et que tu somme le tout tu doit avoir ce que tu cherche. Et tu auras un gain de temps de calcul, matlab et fait pour faire du calcul matriciel, il faut donc eviter les boucles en generale pour allez plus vite.

SI tu n'as rien compris n'hésite pas a me le dire. Mais je ne suis pas sur d'avoir bien compris ce que tu voulais faire. Cordialement.
0