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

Macros et VBA Excel Discussion :

VBA, génération aléatoire, gaussienne et exp


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2011
    Messages : 1
    Par défaut VBA, génération aléatoire, gaussienne et exp
    Bonjour,

    Mon premier post sur ce forum !

    J'ai observé un problème dans une macro excel :


    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
     
    Sub Test()
     
    Randomize
     
     
    Dim a As Double
    Dim b As Double
    Dim g As Double
     
    Dim i As Integer
     
    For i = 1 To 5000
     
    a = Rnd()
    b = Rnd()
     
    g = Sqr(0.1) * Sqr(-2 * Log(a)) * Cos(2 * WorksheetFunction.Pi * b)
     
    Range("A" & i).Value = g
    Range("B" & i).Value = 10 * Exp(g)
     
     
    Next
     
    End Sub

    J'utilise l'algorithme usuel de génération de gaussienne et j'en prend l'exponentielle. Par théorème, la moyenne des exponentielles devrait être l'exponentielle de la moyenne des gaussiennes et donc 1.

    Or, en calculant la moyenne des valeurs obtenues sur ma feuille excel, je trouve un résultat systématiquement supérieur à 10. Le plus souvent ~10.5, ce qui me paraît vraiment élevé pour être une simple erreur d'estimation ( surtout avec 5000 tirages).

    Alors je me demande à quoi est du mon erreur ? Ma programmation, un arrondi malheureux, une exponentielle douteuse ?

    Merci énormément et à bientôt !

    Raphaël

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 105
    Par défaut
    Bonsoir,
    Je ne suis pas un spécialiste en statistiques mais d'après ce que j'ai pu lire, apparemment il n'y a pas de sqr(0.1) soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g = Sqr(-2 * Log(a)) * Cos(2 * WorksheetFunction.Pi * b)
    Je ne connais pas l'autre théorème mais d'après ce que tu écris, il faudrait écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("B" & i).Value = Exp(g)
    sans multiplier par 10 : le résultat est alors 1,6 ce n'est toujours pas 1 .

    @+

  3. #3
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 113
    Par défaut
    Salut
    Tu fais ton calcul de total et moyen dans ton tableau Excel?
    Si c'est ça, je crois bien que les cellule excel ont un grosse perte de précision par rapport à un Double.

    Essai ce code
    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
    Sub Test()
     
    Randomize
     
     
    Dim a As Double
    Dim b As Double
    Dim g As Double, Tg As Double, TExpG As Double
     
    Dim i As Integer
     
    For i = 1 To 5000
     
        a = Rnd()
        b = Rnd()
     
        g = CDbl(Sqr(0.1) * Sqr(-2 * Log(a)) * Cos(2 * WorksheetFunction.Pi * b))
     
        'On fait le total des valeur
        Tg = Tg + g
        TExpG = TExpG + Exp(g)
        Cells(i, "A").Value = g
        Cells(i, "B").Value = 10 * Exp(g)
    Next
    Range("C1") = Tg
    Range("C2") = TExpG
     
    [D1] = Tg / 5000
    [D2] = TExpG / 5000
     
    End Sub
    Pour la moyen des Exp de g, je trouve 1,05150125365753
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

Discussions similaires

  1. Fonction de génération aléatoire gaussienne
    Par Linio dans le forum Langage
    Réponses: 5
    Dernier message: 13/08/2007, 12h57
  2. [VBA-E] memmory génération aléatoire d'images
    Par jhonnybegood dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/03/2007, 21h09
  3. Générer une variable aléatoire gaussienne
    Par User dans le forum Probabilités
    Réponses: 5
    Dernier message: 29/06/2006, 22h58
  4. génération aléatoire
    Par acewb00 dans le forum MFC
    Réponses: 1
    Dernier message: 02/12/2005, 09h46
  5. génération aléatoire de couleur claire
    Par jiraiya dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 25/02/2004, 19h52

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