web-dev-qa-db-fra.com

définition de la graine pour un nombre aléatoire Excel

Sous Excel, la formule générera un nombre aléatoire à partir d'une distribution normale avec une moyenne de 10 et une variance 1. Existe-t-il un moyen de définir une valeur de référence pour obtenir un nombre fixe de nombres aléatoires tout le temps? J'utilise Excel 2010

=NORMINV(Rand(),10,1)
9
user2543622

Vous pouvez implémenter votre propre générateur de nombres aléatoires à l'aide de fonctions de tableur. Par exemple, C++ 11 a un générateur de nombres aléatoires Lehmer appelé minstd_Rand qui est obtenu par la récurrence 

X = X*g (mod m)

g = 48271 et m = 2^31-1

Dans A1, vous pouvez placer votre valeur de départ. Dans A2, entrez la formule:

=MOD(48271*A1,2^31-1)

et copiez-le aussi loin que vous le souhaitez.

Dans B2, entrez =A2/(2^31-1) et dans C2, entrez =NORM.INV(B2,10,1), en effectuant les copies nécessaires. Notez que vous pouvez toujours remplacer la valeur de départ dans A1 par

=RANDBETWEEN(0,2^31-2)

si vous voulez réactiver le caractère aléatoire. 

La capture d'écran suivante montre 25 variables normales aléatoires générées de cette manière:

 enter image description here

Comme vous pouvez le constater d'après l'histogramme, la distribution semble à peu près normale.

16
John Coleman

Vous pouvez utiliser un VBA _ ​​{UDF ()} _ basé sur la fonction Rnd (). Voir:

Répéter des variables aléatoires dans VBA

2
Gary's Student

Je ne prétends pas que c'est une solution parfaite, mais cela fonctionne pour moi ... La beauté de cette solution est que je peux attribuer un numéro aléatoire à une cellule particulière:

Public Function GetRandom(seed As Double, min As Double, max As Double) As Double
    Dim colrow As Double
    Dim range As Double

    range = max - min
    If (Application.Caller.Column() = Application.Caller.Row()) Then
        colrow = (Log(Application.Caller.Column() + 1) * Log(Application.Caller.Row() + 1)) * seed
    Else
        colrow = (Log(Application.Caller.Column() + 1) / Log(Application.Caller.Row() + 1)) * seed
    End If
    Rnd (-1)
    Randomize colrow 
    test = Rnd * range - range / 2
    GetRandom = colrow 
End Function

Usage:

=GetRandom($Z$1,1,-1)

Dans mon exemple, la valeur de départ est dans la cellule Z1, mais bien sûr, elle peut figurer dans n’importe quelle autre cellule. Cela me permet également de définir des valeurs minimales et maximales.

 enter image description here

2
koryakinp