IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

Comment créer un tableau ou vecteur avec les résultats d'une boucle for


Sujet :

MATLAB

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur d'études environnement
    Inscrit en
    Octobre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur d'études environnement

    Informations forums :
    Inscription : Octobre 2014
    Messages : 10
    Par défaut Comment créer un tableau ou vecteur avec les résultats d'une boucle for
    Bonjour à tous,

    Je suis nouveau sur Matlab et j'aimerais savoir comment il est possible de créer un tableau à partir des résultats d'une boucle for.

    Je m'explique : j'ai créé une boucle for me permettant de calculer le débit moyen mensuel de cours d'eau à partir de fichiers de mesures. J'obtiens donc pour chaque fichier 12 valeurs différentes successives correspondant à chaque débit mensuel moyen. Jusque là tout va bien.

    J'aimerais maintenant créer un tableau à deux colonnes "Mois" et "Débit" à partir des résultats successifs de ma boucle.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    liste = dir;
     
    for i = 3:399;
        Name = liste(i).name;
     
        A = dataset('File',Name);
     
        if(length(A) >= 3650);
     
        Mann = mean(A.Qm3s);
     
            for i = 1:12;
                  Mmens = mean(A.Qm3s(find(A.Mois==i)))
     
            end
        end
    end

    Merci à tous d'avance !

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Par défaut
    Bonjour

    Pour le moment ce que tu fais c'est qu'à chaque passage dans ta boucle for tu écrases la valeur de Mmens par la valeur du mois suivant. De plus, je te conseille très vivement de remplacer l'une de tes variables de boucle i par une autre variable afin d'éviter les confusions (par exemple remplacer le premier i par un j?

    Ce que tu peux faire, c'est initialisé ton tableau de la sorte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Mmens(1:12,1) = 1:12; %Première colonne de ton tableau : repère du mois
    puis pour créer ton tableau tu peux faire de cette manière: (Attention, je ne sais pas si tu désires une colonne par fichier, on ne sait pas trop à quoi correspondent tes var
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    liste = dir;
    
    for j = 3:399;  %tu peux remplacer ton 399 par length(dir)-2 si tu veux balayer tout ton répertoire
        Name = liste(i).name;
    
        A = dataset('File',Name);
    
        if(length(A) >= 3650);
    
        Mann = mean(A.Qm3s);   %ceci a t'il une utilité dans ce que tu cherches à faire? 
        
            for i = 1:12;
                  Mmens(i,j-1) = mean(A.Qm3s(find(A.Mois==i))); % i pour chaque ligne de ton tableau (tu as douze lignes, une par mois)
    % j pour chaque fichier de ton répertoire, étant donné que ton j est initialisé à trois et que ta première % colonne contient le repère du mois, on commence à remplir à partir de la 2eme colonne soit j-1
            end
        end
    end
    Si tu veux un tableau 2 colonnes, en faisant la moyenne de chaque fichier, tu peux ensuite ajouter après ta boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maSupermoyenne = cat(2,Mmens(:,1),mean(Mmens(:,2:end),2))

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur d'études environnement
    Inscrit en
    Octobre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur d'études environnement

    Informations forums :
    Inscription : Octobre 2014
    Messages : 10
    Par défaut
    Salut Gooby et merci pour ton aide une nouvelle fois !

    Je vais essayer de faire ça lundi.

    Pour la variable "Mann" effectivement elle me servait dans mon précédent code où je souhaitais tracer des graphes en utilisant "Mann", mais je ne l'utilise pas dans ce code donc je vais supprimer cette ligne. En fait je me suis rendu compte que je n'avais pas besoin de colonne "Mois" dans le tableau que je souhaite faire, puisque je peux savoir à quel mois correspond chaque valeur en ressortant l'indice correspondant. Donc finalement c'est un vecteur simple que je ferai avec les valeurs de débits mensuels moyens (Mmens).

    Encore merci

    Bon weekend

Discussions similaires

  1. [XL-2010] Remplir un tableau avec les résultats d'une fonction
    Par lotfidk dans le forum Excel
    Réponses: 3
    Dernier message: 10/04/2015, 07h34
  2. Réponses: 2
    Dernier message: 17/02/2015, 17h38
  3. Réponses: 1
    Dernier message: 04/04/2010, 09h32
  4. [MySQL] Construire une liste avec les résultat d'une requête
    Par Requiem11 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/04/2009, 23h18
  5. problème avec les résultats d'une requête select top1
    Par kariiim dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 19/03/2007, 15h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo