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 :

Problémes A et B surviennent au meme moment


Sujet :

MATLAB

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2015
    Messages : 26
    Par défaut Problémes A et B surviennent au meme moment
    Bonjour,

    Je suis nouveau sur Matlab, et mon maitre de stage m'a conseillé d'utiliser ce logiciel. Malheureusement, il est parti en vacance et je suis un peu perdu.

    J'ai un certain nombre de véhicules qui présentent différents problèmes et j'aimerais savoir quels véhicules ont les problèmes A et B au même kilométrage. (ex: Véhicule 01, Problème A a 3475km, Problème B à 5078km donc on s'en fiche du véhicule 01. Véhicule 02, Problème A a 2694km, et pas de problème B donc on s'en fiche du véhicule 02. Par contre si pour le Véhicule 03, Problème A a 6875km et Problème B a 6875km, alors noter le numéro du véhicule ainsi que le kilométrage ou les problèmes A et B sont survenu)

    Les données proviennent d'un tableau Excel. Je me suis donc fait un Modèle avant de travailler avec l'original. J’ai bidouillé quelque chose mais je suis bloqué. Je ne sais pas comment continuer.

    Script:

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    [~,~,test] = xlsread('150723_test_matlab.xlsm'); 
     
    v=0; 
     
    length_array = length(test(:,1)); 
     
    % for i=1:length_array ;
    %    
    %     if (test{i,2} == 'asdf1'); 
    %         b=b+1
    %     else
    %     end
    %         
    % end
     
    b = strcmp('asdf1', test);
    e = strcmp('asdf2', test);
     
    c = strcmp('i500', test);
     
    d = b+c 
     
    for i=1:length(d(:,1))
        if (d(i,2)==1) && (d(i,5)==1)
            v=v+1; 
        end
    end
     
    v
    Et le résultat:

    >> testmatlab
    
    d =
    
         0     0     0     0     0     0
         0     1     0     0     1     0
         0     0     0     0     1     0
         0     0     0     0     1     0
         0     0     0     0     0     0
         0     1     0     0     1     0
         0     0     0     0     1     0
         0     0     0     0     1     0
    
    
    v =
    
         2

    Si vous avez des idées je suis preneur. (J'ai pensé a utiliser la fonction find mais je sais pas comment ca marche...)



    Cordialement

  2. #2
    Membre chevronné Avatar de Julien698
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2013
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2013
    Messages : 237
    Par défaut
    Salut,

    Si j'ai bien compris au final tu cherches à en tirer des statistiques ? Regardes de ce côté ci pour avoir des infos sur matlab :http://matlab.developpez.com/tutoriels/
    Sinon je suis sur que tu peux le faire uniquement avec excel regarde du coté des tutos : http://excel.developpez.com/ .

  3. #3
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut ,

    si je comprend bien compris tu as un matrice ou l'ordonnée est les incidents et abscisse les vehicules.

    je reprend ton exemple

    A B
    01 3475 5078
    02 2694
    03 6875 6875


    pour ce genre de matrice Tu as plusieurs solution
    connaissant le nombre d'incident possible a l'avance (A et B)
    une seul boucle suffit
    si tu ne connais pas le nombre d'incident a l'avance et que tu veut récupère le nombre d'incident dont le kilométrage est identique il te faudra imbriquer trois boucle
    une pour les véhicules
    deux pour les incidents (puisque on veut comparer tout les éléments termes a terme)

    appelons ton tableau TDatas et le tableau resultant TResult
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    FOR i=1:length(TDatas)
      TLigne =  TDatas(i,:)
      IF TLigne(1)== TLigne(2)
        TResult = [TResult;TLigne]
      END
    END
    il te suffira d'afficher TResult pour obtenir la liste des incident dont le kilométrage est identique
    le code est sans assurance mais le principe est là

  4. #4
    Membre émérite
    Avatar de soft001
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2008
    Messages
    409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 409
    Par défaut
    Le mieux c'est de nous montrer à quoi ressemble ton fichier Excel.
    Si tes données sont représentées comme dans l'exemple d'anapurna. tu faire comme ça, sans besoin de passer par des boucles for.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    A=[3475;2694;6875];
    B=[5078; NaN; 6875];
    [A B]
    Index=find((A==B)==1);

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2015
    Messages : 26
    Par défaut
    Bonjour,
    Merci pour vos réponses.

    @Julien698 : Oui c'est des Statistiques, et je voulais le faire sur Excel à la base mais mon maitre de stage veut que j'utilise Matlab. Je vais quand même jeter un œil sur les Tutos, merci.

    @Anapourna : Mon tableau est diffèrent du tiens. J'ai fait un modèle du tableau original pour le script que j'ai fait, mais voici un extrait de mon Excel Original (j'ai dû remplacer les noms et valeurs par souci de confidentialité et j'ai supprimé ce dont je n'ai pas besoin).
    Donc par exemple pour le véhicule V10 on voit que A et B apparaissent au même Km (ici 3789km), mais que pour V20, A apparait à 43917km et B a 52137. Donc il faut noter uniquement le Véhicule V10 ET la Maj (mise à jour) (Ici I38-71).

    @Soft01 : Merci, j'ai ajouté un extrait modifié de mon fichier Excel.

    Extait: http://www.cjoint.com/c/EHhiljYPPSE

    Cordialement

  6. #6
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    rassure moi tu as d'autre valeur discriminant
    quand je lis ton fichier excel je vois pas mal de ligne redondante ce qui me parais pas "normal"
    dans ton extrait on vois de suite que le V10 et V20 vont forcement être choisi

    il y a un truc qui doit m’échapper
    soft01 la fonction find renvois un index et si tu trouve 2 entité identique il te renvois quoi ?
    je connais pas bien matlab ... mais le post a l'origine était dans la section algo ^^

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2015
    Messages : 26
    Par défaut
    En effet, j'ai mal appliqué le kilométrage pour les B du V20. Ils sont tous a 52137.
    Et si c'est ce qui me pose problème vu que par exemple le problème A apparaît plusieurs fois au même kilométrage...

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2015
    Messages : 26
    Par défaut
    Voila j'ai mis a jour l'excel:

    http://www.cjoint.com/c/EHngVTmPGeE

    Merci

    Cordialement

  9. #9
    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,

    Peux tu nous montrer à quoi ressemble ton tableau directement dans ta command window?

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2015
    Messages : 26
    Par défaut
    Bonjour Gooby,
    Je ne vois malheureusement pas ce que tu veux dire par là.

    Le tableau Excel que je traite est ici : http://www.cjoint.com/c/EHngVTmPGeE

    J'ouvre le tableau dans Matlab avec la fonction: [~,~,test] = xlsread('Test1.xlsx');

    Tu voudrais un Screenshot du tableau?

    Cordialement

  11. #11
    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
    Ecris test dans la command window, et fais un copier collé du résultat ici.

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2015
    Messages : 26
    Par défaut
    "Der Befehl "test" ist entweder falsch geschrieben oder konnte nicht gefunden werden."
    En gros "La commande "test" est fausse ou n'a pas été trouvé"

    Et bon si je tape Text1.xlsx ca m'ouvre l'excel, logique

  13. #13
    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
    Bien sûr, tu dois écrire test, après avoir importer ton tableau avec xlsread. En fait la question que je me pose c'est quelle tête a le tableau que tu importes sur matlab, parce que je ne sais pas comment interpréter le tableau excel que tu mets en pièce-jointe, On a une suite de A et de B avec toujours les mêmes nombres qui reviennent, c'est assez confus.

  14. #14
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2015
    Messages : 26
    Par défaut
    J'ai lancé le test dans la Cmd Windows apres avoir lancé le scritp avec Xlsread mais je ne sais pas sous quel path c'est stocké. Mais quand je doubleclick sur test dans le workspace directement depuis matlab j'ai ca:

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    NaN	NaN	'Vehicule'	NaN	NaN	NaN	'Code Erreur'	NaN	NaN	'km'	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V10'	NaN	NaN	NaN	'A'	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V10'	NaN	NaN	NaN	'A'	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V10'	NaN	NaN	NaN	'A'	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V10'	NaN	NaN	NaN	'B'	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V10'	NaN	NaN	NaN	'B'	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V10'	NaN	NaN	NaN	'B'	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V10'	NaN	NaN	NaN	'A'	NaN	NaN	3789	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V10'	NaN	NaN	NaN	'B'	NaN	NaN	3789	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V10'	NaN	NaN	NaN	'A'	NaN	NaN	3789	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V10'	NaN	NaN	NaN	'A'	NaN	NaN	3789	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V10'	NaN	NaN	NaN	'A'	NaN	NaN	3789	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V10'	NaN	NaN	NaN	'A'	NaN	NaN	3789	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V10'	NaN	NaN	NaN	'A'	NaN	NaN	3789	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V10'	NaN	NaN	NaN	'A'	NaN	NaN	3789	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V10'	NaN	NaN	NaN	'A'	NaN	NaN	3789	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V10'	NaN	NaN	NaN	'A'	NaN	NaN	3789	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V10'	NaN	NaN	NaN	'A'	NaN	NaN	3789	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V10'	NaN	NaN	NaN	'A'	NaN	NaN	3789	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V10'	NaN	NaN	NaN	'A'	NaN	NaN	3789	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V10'	NaN	NaN	NaN	'A'	NaN	NaN	3789	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V10'	NaN	NaN	NaN	'A'	NaN	NaN	3789	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V10'	NaN	NaN	NaN	'A'	NaN	NaN	3789	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V10'	NaN	NaN	NaN	'A'	NaN	NaN	3789	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V10'	NaN	NaN	NaN	'B'	NaN	NaN	3789	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V10'	NaN	NaN	NaN	'B'	NaN	NaN	3789	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V10'	NaN	NaN	NaN	'B'	NaN	NaN	3789	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V10'	NaN	NaN	NaN	'B'	NaN	NaN	3789	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V10'	NaN	NaN	NaN	'B'	NaN	NaN	3789	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V10'	NaN	NaN	NaN	'B'	NaN	NaN	3789	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V20'	NaN	NaN	NaN	'A'	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V20'	NaN	NaN	NaN	'A'	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V20'	NaN	NaN	NaN	'A'	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V20'	NaN	NaN	NaN	'B'	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V20'	NaN	NaN	NaN	'B'	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V20'	NaN	NaN	NaN	'B'	NaN	NaN	52137	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V20'	NaN	NaN	NaN	'A'	NaN	NaN	43917	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V20'	NaN	NaN	NaN	'B'	NaN	NaN	52137	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V20'	NaN	NaN	NaN	'A'	NaN	NaN	43917	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V20'	NaN	NaN	NaN	'A'	NaN	NaN	43917	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V20'	NaN	NaN	NaN	'A'	NaN	NaN	43917	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V20'	NaN	NaN	NaN	'A'	NaN	NaN	43917	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V20'	NaN	NaN	NaN	'A'	NaN	NaN	43917	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V20'	NaN	NaN	NaN	'A'	NaN	NaN	43917	NaN	NaN	NaN	NaN	NaN	NaN
    NaN	NaN	'V20'	NaN	NaN	NaN	'A'	NaN	NaN	43917	NaN	NaN	NaN	NaN	NaN	NaN
    Malheureusement je suis aussi confu que toi, c'est ce qui me rend la tache difficile en plus d'avoir les meme notions en matlab qu'une loutre

  15. #15
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut ,

    si je comprend bien ton fichier
    c'est l’évolution des erreur après utilisation

    donc les premiere ligne corresponde au utilisation sans intervention
    ensuite une intervention surviens a un certain kilométrage
    une fois l'incident terminé le véhicule est remis en circulation
    d'ou la valeur du kilométrage de l'incident qui ne change pas
    donc maintenant il faut savoir ce que tu veut obtenir
    le nb d'utilisation ayant le même kilométrage et a quelle kilométrage ceux ci on apparu
    par exemple
    pour le V10
    l'erreur de type A apparu au kilomètre 3789 à été utilisé 16 fois
    l'erreur de type B apparu au kilomètre 3789 à été utilisé 7 fois
    pour le V20
    l'erreur de type A apparu au kilomètre 43917 à été utilisé 8 fois
    l'erreur de type B apparu au kilomètre 52137 à été utilisé 2 fois

    dis nous exactement le résultat que tu souhaite obtenir là c'est assez flou

  16. #16
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2015
    Messages : 26
    Par défaut
    Salut, merci de ta réponse.
    En fait, les véhicules sont en circulation pour des tests et les erreurs A et B sont apparu au même moment ( a 3789 km) pour le V10.
    Pour le Véhicule V20, A et B sont apparu a des kilométrages différents.
    Il arrive aussi que le systeme trouve des erreures mais ne note pas le kilométrage, d'oú les km blancs.
    Ce que je cherche c'est, pour quels Véhicules les erreurs A et B sont apparues au même moment. Donc dans l'exemple que j'ai donné le uniquement le V10 correspond a ce que je cherche
    Mais la liste continu sur plus de 50 véhicules. Pour un V30 par exemple, si le km de A == au km de B, on notera V30, on aura donc V10 et V30 qui correspondent a ce que je cherche ect...
    J'espère que ça éclaircie le problème...

    Merci beaucoup

    Cordialement

  17. #17
    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
    Bon déjà la première étape c'est de regrouper les problèmes par véhicule. Est-ce que tu connais le nombre de véhicule par avance? Est-ce que tu fais le découpage par véhicule à la main? Je te propose pour le cas générique quelque chose de ce genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    path = 'C:\Users\R\Downloads\EHngVTmPGeE_Test1.xlsx';
    [~,~,test] = xlsread(path); 
     
    vehicules = test(2:end,3);
    nomsVehicules = unique(vehicules);
     
    for i = 1:length(nomsVehicules)
        g = @(x) strcmp(nomsVehicules{i},x);
        idx_vehicules{i,1} = find(cellfun(g,vehicules));
    end
    Jusque là tu suis? Si tu as des problèmes de compréhension, n'hésite pas.

  18. #18
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2015
    Messages : 26
    Par défaut
    Salut,
    Tu entends quoi par regrouper les problèmes par Véhicule?
    Il y en a 68. Les noms dans l’Excel qui sert d'exemple (V10 ect) ne reflètent rien de l’Excel Original. Ils ont des noms du type V654798 avec aucune suite logique entre le premier de la liste et le suivant (par exemple, le 2eme Véhicule ne s'appellera pas V654799, mais aura un nom complètement diffèrent). Pour faire des groupes avec des même Véhicules (tous les V10 à la suite, suivi par les V20 ect...), je fais un tri tout bête sur Excel.

    Pour ce qui est du script, voilà ce que je comprends:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    path = 'C:\Users\R\Downloads\EHngVTmPGeE_Test1.xlsx'; % chemin vers le dossier ou se trouve l'excel
    [~,~,test] = xlsread(path); % lire l'excel
     
    vehicules = test(2:end,3);  % initialisation des variables, mais je ne voit pas ce que représente le " test(2:end,3)"
    nomsVehicules = unique(vehicules);
     
    for i = 1:length(nomsVehicules) % initialisation de la boucle for
        g = @(x) strcmp(nomsVehicules{i},x); % utilisation du stringcompare, mais le x fait réference a quoi?
        idx_vehicules{i,1} = find(cellfun(g,vehicules)); % indexage je crois?
    end
    Merci beaucoup

  19. #19
    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
    Le petit morceau de code que je t'ai donné, sert dans un cas général comme le tien, à trouver les numéros de ligne du tableau correspondant à chaque véhicule.

    Par exemple dans idx_vehicules{1,1}, il y aura toutes les lignes du tableau correspondant à la première voiture, idx_vehicules{2,1} à la deuxième voiture.

    Maintenant qu'on a identifié chaque voiture dans le tableau, on va "redécouper" chacune de ces parties en deux sous parties contenant les problèmes A et les problèmes B.

    Quelque chose de ce genre donc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    compar_A = @(x) strcmp('A',x);
    compar_B = @(x) strcmp('B',x);
    for i = 1:length(idx_vehicules)
        idx_prob_A{i,1} = find(compar_A(test(idx_vehicules{i,1},7)));
        idx_prob_B{i,1} = find(compar_B(test(idx_vehicules{i,1},7)));
    end
    idx_prob_A{1,1} contient les indices des lignes de idx_vehicules{1,1} lui même contenant les indices des lignes de test correspondant au premier véhicule.

    Ainsi, il ne nous reste plus qu'à chercher les problèmes de A du premier véhicules qui serait survenu au même moment que les problèmes de B ( il y aura ici un résultat équivalent que tu partes de A vers B ou de B vers A).

    Il y a une redondance des lignes dans ton tableau que je n'ai pas bien comprise, cette boucle va servir à s'affranchir de cette redondance:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i = 1:length(idx_vehicules)
        kilometrages{i,1} = unique(cat(1,test{idx_vehicules{i}(idx_prob_A{i,1}),10}));
        kilometrages{i,1} = kilometrages{i,1}(~isnan(kilometrages{i,1}))
    end
    Puis pour savoir quels sont les véhicules dont le problème A et B survient au même kilométrage:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    c=1;
    for i = 1:length(idx_vehicules)
        if ~isempty(find(kilometrages{i,1} == cat(1,test{idx_vehicules{i}(idx_prob_B{i,1}),10})))
            informations{c,1} = test{idx_vehicules{i,1}(1),3};
            c=c+1;
        end
    end

  20. #20
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2015
    Messages : 26
    Par défaut
    Salut,
    merci beaucoup de ton aide et de tes explications.

    J'ai donc lancé le script suivant:

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    path = 'C:\Users\Desktop\Praktikum\Aufgaben\Stef S\1-\Matlab\Test1.xlsx'; %Path to the Excel
    [~,~,test] = xlsread(path); %Open and read the Excel with Matlab
     
    vehicules = test(2:end,3);  %initialisation of the variables
    nomsVehicules = unique(vehicules);
     
    for i = 1:length(nomsVehicules) 
        g = @(x) strcmp(nomsVehicules{i},x); 
        idx_vehicules{i,1} = find(cellfun(g,vehicules)); %Indexing of the Vehicles per V-Number (idx_vehicules{1,1}: 1st Car; idx_vehicules{2,1}: 2nd Car)
    end
     
    compar_A = @(x) strcmp('A',x);
    compar_B = @(x) strcmp('B',x);
    for i = 1:length(idx_vehicules)
        idx_prob_A{i,1} = find(compar_A(test(idx_vehicules{i,1},7))); %Indexing problem A for each Vehicle
        idx_prob_B{i,1} = find(compar_B(test(idx_vehicules{i,1},7))); %Indexing problem B for each Vehicle
    end
     
    for i = 1:length(idx_vehicules)
        kilometrages{i,1} = unique(cat(1,test{idx_vehicules{i}(idx_prob_A{i,1}),10})); % Deleating the Exact sames Lines to make the Excel "lighter" and easier to use
        kilometrages{i,1} = kilometrages{i,1}(~isnan(kilometrages{i,1}))
    end
     
    c=1;
    for i = 1:length(idx_vehicules)
        if ~isempty(find(kilometrages{i,1} == cat(1,test{idx_vehicules{i}(idx_prob_B{i,1}),10}))) %A and B at the same km for each Vehicle
            informations{c,1} = test{idx_vehicules{i,1}(1),3};
            c=c+1;
        end
    end
    Et j'ai ce résultat qui s'affiche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    >> CompAB
     
    kilometrages = 
     
        [3789]
     
     
    kilometrages = 
     
        [ 3789]
        [43917]
    C'est déjà super parce qu’il reconnait les kilométrages. Le nom des Véhicules n'est pas affiché mais je suppose que le code suivant affiche pour le premier Véhicule V10:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    kilometrages = 
     
        [3789]
    Et celui la le V20:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    kilometrages = 
     
        [ 3789]
        [43917]
    Je pense qu'il y a une erreur puisque ce dernier reprend un kilométrage du V10 mais il reconnait qu'il y a deux kilométrages diffèrent pour les problèmes A et B. Tu en penses quoi?

    Pour afficher les noms des Véhicules, est-ce que la commande println fonctionne (comme en Java et C/C++/Arduino)?


    Cordialement

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Problème d'impression très bizarre (pour le moment)
    Par over_score dans le forum AS/400
    Réponses: 0
    Dernier message: 24/10/2012, 16h37
  2. Segfault qui se produit pas au meme moment ?
    Par zarohn dans le forum Linux
    Réponses: 6
    Dernier message: 10/08/2011, 20h43
  3. probléme 2 master source dans la meme table
    Par zimamouche1 dans le forum Bases de données
    Réponses: 2
    Dernier message: 01/06/2011, 17h55
  4. [GTW/Hibernate/Gilead] problème d'utilisation des 3 en meme temps
    Par <romain/> dans le forum GWT et Vaadin
    Réponses: 2
    Dernier message: 31/03/2009, 15h35
  5. Réponses: 3
    Dernier message: 30/10/2007, 13h27

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