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

C++ Discussion :

Difficultés pour la distribution gaussienne


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Difficultés pour la distribution gaussienne
    Bonjour,
    je suis étudiant en 2ème année de sciences physiques.
    Au dernier cours on a parlé de distribution gaussienne, pour moi ca était trop vite et je n'ai pas su comprendre le programme qu'on a écrit....

    Voici le 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
    25
    26
    27
    28
    29
    30
    #include <iostream>
    #include <cstdlib>
    #include <cmath>
     
    using namespace std;
     
    double uniform (float a, float b) {
    	return a+(float) rand()/RAND_MAX*fabs(b-a);  
    }
     
    double expo (double a) {
    	double x = uniform(0,1);
    	double R;
    	while (x==1) {
    		x = uniform(0,1);
    	}
     
    	R = -a*log(1-x);
    	return R;
    }
     
    int main () {
    	int N = 50;
    	srand (15);
    	for (int i = 0; i<N; i++) {
    	cout << rand () << endl;	
    	}
     
    	return 0;
    }
    En un premier temps, si je comprends bien, on définit uniform, qui prend des nombres aléatoires et qui les distribue de manière uniforme. Par contre pour le expo j'ai vraiment du mal à voir ce qui se passe....

    Merci d'avance pour votre aide !

  2. #2
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    1) utilise la balise code (symbole# dans l’éditeur) au lieu du gras.
    2) Tu ne bloques pas sur du C++ mais sur des maths. Ton sujet aurait plus sa place sur ce forum
    3) Mais comme je suis gentil je vais répondre.

    uniform devrait te donner un nombre aléatoire entre a et b selon une loi .. uniforme, ie avec une densité de probabilité constante. En pratique, il y quelques problèmes

    Pour transformer cette distribution en une distribution normale, il y a plusieurs méthodes.

    • Une méthode peut être la transformé de Box-Muller.
    • Toi, tu utilises le lemme suivant : si U suit une loi uniforme sur [0,1], alors X= F^(-1)(U) suit la loi de fonction de distribution F. On veut F une exponentielle, donc l'inverse de F c'est du log. Voir ici page 6 pour une démonstration

    4) N'utilise JAMAIS du code que tu as écrit toi même sur ce genre de chose. Utilise std::normal_distribuion (introduit en C++11)
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

Discussions similaires

  1. Difficulté pour Installer DBDesigner
    Par piff62 dans le forum Applications et environnements graphiques
    Réponses: 8
    Dernier message: 31/01/2008, 00h01
  2. [JNI] Difficultés pour utiliser une DLL
    Par etiennegaloup dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 15/08/2005, 21h29
  3. En difficulté pour faire une requete
    Par Fonzy17 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 21/03/2005, 10h56
  4. Réponses: 10
    Dernier message: 22/09/2003, 21h58
  5. Difficultés pour afficher un pixel à l'écran
    Par Bubonik software dans le forum C
    Réponses: 9
    Dernier message: 17/08/2003, 12h48

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