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 :

histogramme et occurence


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2013
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 69
    Points : 19
    Points
    19
    Par défaut histogramme et occurence
    Bonjour,

    je cherche a créer un histogramme de la répartition d'une variable r sur le temps.

    Voici mon programme :
    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
    % lecture feuille 1
    num = xlsread(filename,'Feuil1');
    
    % vue d'emsemble
     
    t=num(:,1);
    r=num(:,2);
    t(isnan(t)) = [];
    r(isnan(r)) = [];
    
    
    t2=[0;diff(t)];
    
    t2 = floor(10^0*t2)*10^-0;
    n=sum(t2);
    
    % calcul de l'occurence_1
    R = unique(r);
    ocu = histc(R(:),t2)./n;
    
    figure(2)
    
    bar(L,ocu,1,'g'); hold on
    Il doit y avoir une erreur car matlab me renvoie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ??? Error using ==> histc
    Edge vector must be monotonically non-decreasing.
    
    Error in ==> lecture2 at 27
    ocu = histc(R(:),t2)./n;
    
    Error in ==> run at 57
              evalin('caller', [s ';']);

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Donnes nous les premières valeurs contenues dans la variable num
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2013
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 69
    Points : 19
    Points
    19
    Par défaut
    t/ colonne 1
    15,4289999
    16,64599991
    17,7840004
    18,86100006
    20,07799911
    21,18499947
    22,43300056
    23,51000023
    24,83600044
    25,88100052
    27,12899971
    28,19000053
    29,40699959
    30,56100082

    r/colonne 2
    2
    2
    2
    2
    2
    2
    2
    2
    2
    2
    2
    2
    2
    3

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Citation Envoyé par vampirerose Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    num = xlsread(filename,'Feuil1');
     
    % vue d'emsemble
     
    t=num(:,1);
    r=num(:,2);
    t(isnan(t)) = [];
    r(isnan(r)) = [];
    Je pense qu'il y a un soucis avec la recherche des valeurs NaN.
    Es-tu sur qu'elles appariassent toujours au même niveau dans les deux vecteurs t et r ?

    Voici une version plus robuste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    num = xlsread(filename,'Feuil1');
     
    idx = any(isnan(num),2);
    num(idx,:) = [];
     
    t = num(:,1);
    r = num(:,2);
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2013
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 69
    Points : 19
    Points
    19
    Par défaut
    Mon programme m'affiche tout de meme cette erreur

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Donnes nous alors toutes les valeurs de num ou bien le fichier Excel
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  7. #7
    Membre à l'essai
    Inscrit en
    Mars 2013
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 69
    Points : 19
    Points
    19
    Par défaut
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    t/ colonne 1
    15,4289999
    16,64599991
    17,7840004
    18,86100006
    20,07799911
    21,18499947
    22,43300056
    23,51000023
    24,83600044
    25,88100052
    27,12899971
    28,19000053
    29,40699959
    30,56100082
    31,84000015
    32,88499832
    34,16500092
    35,19400024
    36,44200134
    37,56499863
    38,86000061
    39,92100143
    41,15299988
    42,22999954
    43,55599976
    44,60100174
    45,86500168
    46,83200073
    48,20500183
    49,25
    50,4980011
    51,59000015
    52,85300064
    53,96099854
    55,25600052
    56,34799957
    57,61100006
    58,68799973
    59,91999817
    61,01200104
    62,24499893
    63,32099915
    64,59999847
    65,70800018
    66,97200012
    68,00099945
    69,24900055
    70,30999756
    71,69799805
    72,68099976
    73,94499969
    75,06800079
    76,30000305
    77,33000183
    78,65599823
    79,7009964
    81,01200104
    82,04100037
    83,33599854

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    r/ colonne 2
    2
    2
    2
    2
    2
    2
    2
    2
    2
    2
    2
    2
    2
    3
    4
    4
    4
    4
    3
    2
    2
    2
    2
    2
    1
    1
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1
    2

  8. #8
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Ne cherches-tu pas plutôt à faire ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ocu = histc(t2,R(:))./59
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  9. #9
    Membre à l'essai
    Inscrit en
    Mars 2013
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 69
    Points : 19
    Points
    19
    Par défaut
    Non en fait je cherche a retrouver la répartition de r en sur l'ensemble de ma durée.

  10. #10
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Que fait la ligne suivante ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t2 = floor(10^0*t2)*10^-0;
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  11. #11
    Membre à l'essai
    Inscrit en
    Mars 2013
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 69
    Points : 19
    Points
    19
    Par défaut
    Elle n'est pas nécessaire elle arrondissait mes valeurs

  12. #12
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Je crois simplement que tu ne comprends pas à quoi correspond le deuxième argument de histc, si ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  13. #13
    Membre à l'essai
    Inscrit en
    Mars 2013
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 69
    Points : 19
    Points
    19
    Par défaut
    Le problème vient peut etre de la en effet

  14. #14
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Alors on reprends

    Tu disposes d'un vecteur t contenant des relevé de temps. Les valeurs sont donc monotones et croissantes.

    Tu disposes d'un vecteur r contenant une donnée pour chaque valeur de temps dans t. Chaque élément de r peut prendre la valeur 0, 1, 2, 3 ou 4.

    Donc si je comprends bien, tu cherches à savoir le temps passé pour chaque valeur de r, c'est ça ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  15. #15
    Membre à l'essai
    Inscrit en
    Mars 2013
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 69
    Points : 19
    Points
    19
    Par défaut
    Exact

  16. #16
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Dans ce cas, pourquoi ne pas utiliser un simple boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ur = unique(r);
     
    t2 = diff(t);
    r(1) = [];
     
    for n = 1:numel(ur)    
        idx = r==ur(n);
        T(n) = sum(t2(idx));
    end
     
    [ur(:) T(:)]
    C'est l'idée, à toi de l'adapter à ton problème.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  17. #17
    Membre à l'essai
    Inscrit en
    Mars 2013
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 69
    Points : 19
    Points
    19
    Par défaut
    C'est juste que dans ce forum on m'avais conseillé de ne pas trop employer des boucles...mais si ta solution marche je suis preneur

  18. #18
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Ce n'est pas une vérité absolue, même si cela se confirme souvent.

    Par contre, rien n'interdit de passer d'abord par une solution avec boucle qui fonctionne avant de chercher à s'en passer.

    C'est d'ailleurs souvent préférable pour bien comprendre l'algorithme.

    D'autre part, si le temps d'exécution n'est pas un problème, la boucle sera souvent bien plus lisible que le code vectorisé.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  19. #19
    Membre à l'essai
    Inscrit en
    Mars 2013
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 69
    Points : 19
    Points
    19
    Par défaut
    Ok merci. je regarde ce que tu me proposes

  20. #20
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Si tu tiens vraiment à te passer de la boucle, tu peux utiliser la fonction accumarray.

    A la place de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for n = 1:numel(ur)    
        idx = r==ur(n);
        T(n) = sum(t2(idx));
    end
    tu fais simplement :

    Mais c'est tout de suite moins lisible.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2000] Histogramme qui compte les occurences
    Par pitipilot dans le forum Excel
    Réponses: 2
    Dernier message: 25/07/2011, 11h07
  2. Questions sur chartfx (histogramme)
    Par lejert dans le forum C++Builder
    Réponses: 2
    Dernier message: 20/01/2004, 13h54
  3. recherche du nombre d'occurences dans une table
    Par berry dans le forum Requêtes
    Réponses: 3
    Dernier message: 09/01/2004, 20h03
  4. Première occurence d'une donnée
    Par bob33 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 10/06/2003, 13h50
  5. [TChart] comment remplir un histogramme avec du rouge strié.
    Par :GREG: dans le forum Composants VCL
    Réponses: 2
    Dernier message: 12/08/2002, 09h37

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