Bonjour,
Il s'agit juste d'1 petit problème que je me suis posé récemment, sans application particulière, et dont je souhaiterai tout de même trouver la solution algorythmique.
Voila, je souhaiterai à l'aide de la fonction random (Rnd sous VB) créer une fonction qui me génère une variable qui suive une gaussienne(m,e) (au lieu d'1 loi uniforme):
Voila comment j'ai essayé sans succès:
je considère n valeurs gaussiennes(m=0,e=1),
ces n valeurs doivent se répartire suivant la fameuse courbe, densité forte au centre 0, et densité plus faible à mesure que l'on s'écarte de la moyenne 0.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 m=0 ' moyenne e=1 ' écart type n=100000 ' nombre de valeurs
Ou NormInv est la fonction normale cumulative inverse sous Excel
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Randomize ' initialise le générateur aléatoire Indice = Int(Rnd * n + 1) ' Génère un indice aléatoire entre 1 et n=100000 ' C'est l'indice de la valeur que l'on cherche p = indice / n ' détermine la proportion de valeurs à gauche de l'indice (indice compris) ' cette proportion est elle égale à la valeur de la loi normal cumulé pour la valeur x que l'on cherche ? 'Si oui alors, on obtient x en VB par: x=Excel.WorksheetFunction.NormInv(p, m, e)
Mais les tests ne sont pas satisfaisant, alors pourriez vous éclairer ma lanterne ?
Merci d'avance,
Partager