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 :

Nombres aléatoires / loi normale


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 13
    Points : 6
    Points
    6
    Par défaut Nombres aléatoires / loi normale
    Bonjour,
    J'essaye de générer une série de nombres aléatoires distribués de façon gaussienne, la moyenne doit être <m> et l'écart type de 1, ensuite je dois l'afficher.
    J'ai écrit le programme suivant en cherchant comment marchait randn, mais je ne suis pas sure d'avoir compris, car je n'obtiens pas de courbe Gaussienne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    clear all
    close all
     
    N=input('nombre de lignes que vous voulez générer pour la matrice: ')
    m=input('entrez la valeur de la moyenne dont vous souhaitez tracer la courbe gaussienne: ')
    serie=m+1.*randn(N,2) % commentaire: On génère une série de nombres de moyenne a et d'écart type 1
    bar(serie) % commentaire: on affiche la courbe avec un histogramme

    Je pense que le problème vient de la fonction randn, j'ai pas bien saisi la signification des arguments (j'ai repris l'exemple qui est proposé dans l'aide de matlab, en supposant que m donnait bien la moyenne et 1 l'écart type..)
    Si vous savez d'où vient le problème, ça m'aiderait !
    Merci beaucoup, bonne soirée.


    Autre question sans rapport: Comment faire pour afficher un cercle dont je connais le rayon et le centre sur matlab ?

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    Bonjour.
    Un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    clear
    N=10000;
    m=0.1;
    x = -3:0.1:3;
    serie=m+sqrt(1)*randn(N,1);
    hist(serie,x)
    Un exemple de cercle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    clc
    R=1;X=2;Y=1
    hold on
    theta=-pi:0.1:pi;
    plot(R*exp(j*2*pi)*exp(j*theta)+(X+j*Y),'r','LineWidth',1)
     
    axis([-4 4 -4 4])
    axis equal
    grid
    title('Cercle')
    hold off

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    d'un point de vue math, phryte dit que si X suit une distribution normale centrée réduite (moyenne = 0 et ecart-type = 1), alors Y = mu + sigma * X suit une loi normale de moyenne mu et d'écart-type sigma

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 134
    Points : 129
    Points
    129
    Par défaut
    Citation Envoyé par salseropom Voir le message
    d'un point de vue math, phryte dit que si X suit une distribution normale centrée réduite (moyenne = 0 et ecart-type = 1), alors Y = mu + sigma * X suit une loi normale de moyenne mu et d'écart-type sigma
    Qui dit Maths dit rigueur soit ; une loi normale d'espérance mathématique mu et d'ecart-type sigma (on assimile la notion statistique de moyenne à la notion probabiliste d'espérance mathématique lors de grands échantillons via le TCL et la loi des grands nombres )
    Au taf : Quad Core/8Go de RAM sous Win Seven 64 - Matlab 2009b 64bit.
    Perso : Core 2 Duo/8Go de RAM Mac OS X 10.6 - Matlab 2009b 64bit

  5. #5
    Futur Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Bonsoir,
    Tout d'abord merci pour vos réponses. J'ai essayé de comprendre et de modifier mon programme avec ce que vous m'avez dit mais ça ne marche toujours pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    x= -3:0.1:3;
    N=input('nombre de lignes que vous voulez générer pour la matrice: ')
    a=input('entrez la valeur de la moyenne dont vous souhaitez tracer la courbe gaussienne: ')
    serie=a+sqrt(1)*randn(N,1);   % On génère une série de nombres de moyenne a et d'écart type 1
    hist(serie,x)
    Pourtant je ne vois pas l'erreur... Ensuite, je n'ai pas bien compris à quoi sert ce x allant de -3 à 3 (d'ailleurs pourquoi 3 ?), ni à quoi sert la racine dans le calcul de serie car dans l'aide matlab, ils décrivent la fonction randn en mettant dans serie: serie = moyenne + écart-type (donc 1 dans mon cas, mais si j'avais 2 ce serait faux d'écrire sqrt(2) alors, non ?) * randn...
    Et enfin, dans hist pourquoi on met serie en 1er et x en 2nd ?

    Merci beaucoup !

  6. #6
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    Bonjour.
    serie = moyenne + écart-type
    On préfère travailler en variance :
    serie = moyenne + sqrt(variance)
    Exemple avec:
    N=1000
    m=0.1
    var=2
    Nd=100
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    clear all
    close all
    N=input('nombre de lignes que vous voulez générer pour la matrice: ')
    m=input('entrez la valeur de la moyenne dont vous souhaitez tracer la courbe gaussienne: ')
    var=input('entrez la valeur de la variance dont vous souhaitez tracer la courbe gaussienne: ')
    Nd=input('entrez la valeur de la distribution dont vous souhaitez tracer la courbe gaussienne: ')
    NH=linspace(-5,5,Nd)';
    serie=m+sqrt(var)*randn(N,1); % commentaire: On génère une série de nombres de moyenne a et d'écart type 1
    hist(serie,NH) % commentaire: on affiche la courbe avec un histogramme
    à quoi sert ce x allant de -3 à 3 (d'ailleurs pourquoi 3 ?)
    En général on distribue de -3*sigma à 3*sigma ce qui représente 99% de l'effectif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NH=linspace(-3*sqrt(var),3*sqrt(var),Nd)';

Discussions similaires

  1. Génération de nombres aléatoires et loi normale
    Par nhatgiang174 dans le forum Excel
    Réponses: 5
    Dernier message: 16/02/2015, 09h55
  2. Réponses: 10
    Dernier message: 19/01/2012, 12h56
  3. Réponses: 1
    Dernier message: 19/05/2011, 12h48
  4. Nombres aléatoires - loi de puissance
    Par einrish dans le forum Fortran
    Réponses: 1
    Dernier message: 29/01/2011, 08h22
  5. Réponses: 2
    Dernier message: 16/05/2006, 17h02

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