Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

Tracer une gaussienne avec matlab




  1. #1
    Stefan77

    Tracer une gaussienne avec matlab

    Salut, sur Matlab, je dois tracer la courbe théorique de ce bazar: untitled.jpg
    En gros, on simule 10 000 fois une variable aléatoire qui suit une loi normale N(175,20²). Donc la simulation je l'ai mais pour la courbe théorique, je bloque.
    Je n'ai que cette courbe mais elle est centrée réduite courbe.jpg
    Pour la tracer, j'ai utilisé ce code:
    Code:
    y = normpdf(x,0,1)
    plot(x,y)
    Donc j'ai logiquement pensé qu'en remplaçant les valeurs 0 et 1 par respectivement 175 et 20 j'aurais eu la bonne courbe. Mais j'ai ça untitled.jpg
    Bon après on me demande de superposer les deux. Pour ça j'ai pu trouver un code sur internet qui le fait déjà:
    Code:
    r=normrnd(175,20,[1,10000]);
    histfit(r,100)
    Et du coup j'ai ça: untitled.jpg

    Donc quel est le code pour tracer uniquement une gaussienne comme sur la pièce jointe ci-dessus?
    Merci

    -----


  2. Publicité
  3. #2
    Antoane

    Re : Tracer une gaussienne avec matlab

    Bonsoir,

    Tu peux calculer la ddp à partir de son expression analytique :
    x = linspace(mu-3*sigma, mu+3*sigma, 5e2) ;



    ou bien utiliser normpdf si tu ne connais pas cette formule . Un coup d'oeil à l'aide (taper "doc normpdf" dans l'invite de commandes) https://fr.mathworks.com/help/stats/normpdf.html indique :
    y = normpdf(x,mu,sigma) returns the pdf of the normal distribution with mean mu and standard deviation sigma, evaluated at the values in x.
    Donc j'ai logiquement pensé qu'en remplaçant les valeurs 0 et 1 par respectivement 175 et 20 j'aurais eu la bonne courbe. Mais j'ai ça...
    C'est bien la ddp, entre -6 et +6, d'une distribution gausienne de moyenne 175 et de variance 400.

    Bon après on me demande de superposer les deux. Pour ça j'ai pu trouver un code sur internet qui le fait déjà:
    tu as compris ce que fait la fonction histfit ?
    Dernière modification par Antoane ; 06/01/2019 à 21h31.
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  4. #3
    Stefan77

    Re : Tracer une gaussienne avec matlab

    J'avais cherché sur le site de matlab et j'ai trouvé ça: "Construct a histogram with a normal distribution fit"
    Donc ça trace l'histogramme avec sa distribution normale? C'est ce qui m'est demandé non?

    Pour ce qui est de la gaussienne j'avais aussi essayé de tracer avec la formule analytique et j'avais le même problème.
    Pourtant en essayant sur un site de tracé en ligne, quand je rentre les paramètres de mon exercice, j'obtiens une belle courbe qui n'est pas comme celle de la 3ème photo.
    Ou alors y'a un truc qui m'échappe


  5. #4
    Stefan77

    Re : Tracer une gaussienne avec matlab

    J'ai essayé de tracer avec le linespace, la première fois j'avais fait sans.

    Voilà mon code:

    Code:
    mu=175;                               
    sigma=20;                     
    x=linspace(mu-3*sigma, mu+3*sigma, 5e2);
    y=exp(-0.5*((x-mu)/sigma).^ 2)/(sigma*sqrt(2*pi));
    figure (4)
    plot(x,y)
    Mais du coup mon amplitude n'est pas bonne
    fig.jpg

  6. #5
    Antoane

    Re : Tracer une gaussienne avec matlab

    Citation Envoyé par Stefan77 Voir le message
    J'avais cherché sur le site de matlab et j'ai trouvé ça: "Construct a histogram with a normal distribution fit"
    Donc ça trace l'histogramme avec sa distribution normale? C'est ce qui m'est demandé non?
    Plus ou moins.... Tu veux tracer une gaussienne avec les paramètre (175, 20²) alors que histfit va tracer la ddp de distribution normale qui colle le mieux aux données. Hors, du fait du nombre fini d'échantillons (et de la précision de l'algo), le set de données n'est pas parfaitement bien distribué. histfit tracera donc une gaussienne avec des paramètres du genre (176, 19²). L'estimation de sigma et de µ n'est pas parfaite.

    Pour ce qui est de la gaussienne j'avais aussi essayé de tracer avec la formule analytique et j'avais le même problème.
    Pourtant en essayant sur un site de tracé en ligne, quand je rentre les paramètres de mon exercice, j'obtiens une belle courbe qui n'est pas comme celle de la 3ème photo.
    Ou alors y'a un truc qui m'échappe
    Tu ne trace pas sur le bon intervalle.
    Il est normal que la ddp de la distribution normale (175, 20²) vaut environ 0 (~1E-18 d'après la figure) autour de 0... Elle prendra des valeurs raisonnables, avec une belle forme de serpent ayant avalé un éléphant (à une seule bosse) autour de 175.

    Edit : ton message de 22h47 est apparu pendant que je rédigeais le mien.
    Il me semble que la figure n'est pas la bonne.
    > J'ai essayé de tracer avec le linespace, la première fois j'avais fait sans.
    en effet, tu avais gardé la valeur de x obtenue pour tracer la ddp normale centrée-réduite. D'où l'importance du "clear; close all;" en début de script
    Dernière modification par Antoane ; 06/01/2019 à 22h54.
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  7. A voir en vidéo sur Futura
  8. #6
    Stefan77

    Re : Tracer une gaussienne avec matlab

    J'arrive toujours pas à voir comment le coder et ça commence à me frustrer
    Mais je m'avoue pas vaincu, je vais bien finir par coder tout ce bazar.
    Sinon, peut-on tracer l'histogramme qui va avec la loi?
    C'est à dire que je veux aussi avoir l'histogramme théorique pour le comparer avec celui que j'ai dans la pratique.

  9. #7
    Antoane

    Re : Tracer une gaussienne avec matlab

    Tu as déjà écrits tout le code.
    Code:
    mu=175;                               
    sigma=20;                     
    x=linspace(mu-3*sigma, mu+3*sigma, 5e2);
    y=exp(-0.5*((x-mu)/sigma).^ 2)/(sigma*sqrt(2*pi));
    
    figure
    hold on
    r=normrnd(175,20,[1,10000]);
    histogram(r, 'Normalization', 'pdf')
    
    plot(x,y)
    Dernière modification par Antoane ; 07/01/2019 à 10h24.
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  10. Publicité
  11. #8
    Stefan77

    Re : Tracer une gaussienne avec matlab

    D'accord très bien merci

  12. #9
    Stefan77

    Re : Tracer une gaussienne avec matlab

    Je me permets de up le message pour une question concernant la fonction "length".
    Alors voilà, on me demande de ressortir le nombre de valeurs comprises dans un certain intervalle de l'histogramme (de 175 à 215).
    Existe-t-il un code spécial?
    Ou alors je fais une boucle? Par exemple, tant que la valeur est comprise entre 175 et 215 on rajoute +1.
    Merci

  13. #10
    Antoane

    Re : Tracer une gaussienne avec matlab

    Bonjour,

    D'une manière générale, il faut éviter les boucles sous Matlab (qui est un langage interprété) et "vectoriser" autant que possible les opérations.

    Ici, tu peux par exemple faire des comparaisons vectorielles :
    avec le code :
    Code:
    a = 1:10  ;
    is_greater_than_five = a > 5 ;
    is_greater_than_five(k) vaut 1 si a(k)>5 et 0 sinon.
    Tu peux ensuite faire un sum(is_greater_than_five) pour savoir combien d'éléments de is_greater_than_five valent 1.
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  14. #11
    Stefan77

    Re : Tracer une gaussienne avec matlab

    Super merci beaucoup !

Discussions similaires

  1. Comment tracer un champ vectoriel 3D avec Matlab?
    Par sylvain6120 dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 14/09/2012, 21h54
  2. tracer un fonction défini par des intervalles avec Matlab
    Par ch89 dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 15/11/2011, 19h14
  3. Intersection arc cercle et gaussienne avec Matlab
    Par Lostinounette dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 27/05/2010, 10h15
  4. [exo] fit d'une courbe avec une gaussienne sous Matlab
    Par wooflele dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 16/06/2009, 21h59
  5. Tracer des vecteurs avec Matlab
    Par niconico888 dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 20/02/2009, 17h03