Exponentielle et génération aléatoire en VBA
Raphael025
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
-
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Mon premier post sur ce forum !
J'ai observé un problème dans une macro excel :
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
Mon premier post sur ce forum !
J'ai observé un problème dans une macro excel :
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
A voir également:
- Exponentielle et génération aléatoire en VBA
- Generation ryzen - Guide
- Réinitialiser chromecast 1ere génération - Guide
- Excel compter cellule couleur sans vba - Guide
- Ti college plus exponentielle - Forum calculatrices
- Vba attendre 1 seconde ✓ - Forum VB / VBA
3 réponses
Bonsoir,
Je ne connais pas ton algorithme usuel mais un piège classique sur vba :
avec log on s'attend à travailler avec le log décimal or il s'agit du log népérien.
Si jamais...
eric
edit:
Par théorème, la moyenne des exponentielles devrait être l'exponentielle de la moyenne des gaussiennes et donc 1.
Je vais peut-être dire une bétise mais tu mets 10 * Exp(g) et non Exp(g), c'est peut-être normal que tu trouves une valeur 10 fois plus élevée (?)
Je ne connais pas ton algorithme usuel mais un piège classique sur vba :
avec log on s'attend à travailler avec le log décimal or il s'agit du log népérien.
Si jamais...
eric
edit:
Par théorème, la moyenne des exponentielles devrait être l'exponentielle de la moyenne des gaussiennes et donc 1.
Je vais peut-être dire une bétise mais tu mets 10 * Exp(g) et non Exp(g), c'est peut-être normal que tu trouves une valeur 10 fois plus élevée (?)
Bonsoir Eric,
Merci beaucoup pour ta réponse.
L'algorithme usuel est en fait celui de Box-Muller :
https://www.taygeta.com/random/gaussian.html
Il s'agit du log népérien qui est utilisé.
Je me demande vraiment s'il y'a un erreur dans mon code, ou si c'est l'arrondi qui plante...La suite converge rapidement vers 10.5 alors qu'elle devrait converger vers 10.
edit :
La moyenne de 10*Exp(g) devrait être 10 fois la moyenne de Exp(g) soit 10*1.
Merci beaucoup pour ta réponse.
L'algorithme usuel est en fait celui de Box-Muller :
https://www.taygeta.com/random/gaussian.html
Il s'agit du log népérien qui est utilisé.
Je me demande vraiment s'il y'a un erreur dans mon code, ou si c'est l'arrondi qui plante...La suite converge rapidement vers 10.5 alors qu'elle devrait converger vers 10.
edit :
La moyenne de 10*Exp(g) devrait être 10 fois la moyenne de Exp(g) soit 10*1.
Si tu es sûr de ton algorithme on peut supposer des erreurs d'arrondis (courants et normaux dans excel, amplifiés par l'exponentielle (?))
Sur ce site on trouve des fonctions plus précises dont AleaStable() qui permet de générer des nombres selon une loi normale (est-ce réellement ce que tu veux, pas sûr).
Peut-être pas vraiment adapté à ton pb (j'avoue être dépassé) mais si ça te permet de générer une suite de meilleure qualité. A toi de voir...
eric
Sur ce site on trouve des fonctions plus précises dont AleaStable() qui permet de générer des nombres selon une loi normale (est-ce réellement ce que tu veux, pas sûr).
Peut-être pas vraiment adapté à ton pb (j'avoue être dépassé) mais si ça te permet de générer une suite de meilleure qualité. A toi de voir...
eric