Générateur de nombres pseudo-aléatoires
r = rand() r = rand(m1,m2,...) r = rand(m1,m2,...,key) r = rand(x) r = rand(x,key) s = rand("seed") rand("seed",s) rand(key) key = rand("info")
entiers
chaîne de caractères, "uniform"
ou
"normal"
(par défaut: key="uniform"
)
tableau (vecteur, matrice, hypermatrice) de booléens, nombres, ou polynomes, dont uniquement les dimensions et le caractère réel ou complexes sont pris en compte.
tableau de nombres décimaux ou complexes, de taille m1-par-m2-par-... avec des valeurs aléatoires.
un entier positif, la graine (par défaut: s=0
).
Le but de cette fonction est de retourner un tableau de nombres dont les valeurs sont des nombres aléatoires réels ou complexes. En fonction des arguments d'entrée, la fonction peut renvoyer une matrice de doubles aléatoires or peut configurer ou récupérer la distribution des nombres aléatoires ou peut configurer ou récupérer la graine du générateur aléatoire.
Sans l'argument key
la syntaxe ci-dessous produit
une matrice aléatoire dont chaque élément est la réalisation d'une
variable aléatoire suivant une loi donnée (par défaut uniforme sur
[0,1]).
renvoit un scalaire aléatoire.
est une matrice aléatoire de dimensions m1
x m2
.
est une matrice aléatoire de dimensions m1
x m2
,.. x mn
.
est une matrice aléatoire de mêmes dimensions que a.
rand(a)
est complexe si a
est
une matrice complexe.
S'il est présent, l'argument key
permet de
spécifier la loi suivie par défaut par la variable aléatoire.
La loi par défaut est uniforme sur l'intervalle [0,1].
La loi par défaut est une loi normale centrée réduite (moyenne 0, variance 1).
renvoie la distribution courante, c'est à dire "uniform" ou "normal".
Il est possible de réinitialiser l'état interne du générateur aléatoire (spécifié par un entier de l'intervalle [0,2^31-1]) ):
Renvoie la valeur courante de la graine.
Configure la valeur s
de la graine (par
défaut la graine est initialisée à s=0
au premier
appel).
Dans l'exemple suivant, nous générons des doubles associés à différentes distributions.
Dans l'exemple suivant, nous changeons la distribution des nombres générés par rand
.
Nous produisons d'abord des nombres normaux centrés réduits, puis des nombres uniformes dans [0,1[.
Dans l'exemple suivant, nous générons une matrice complexe de doubles de taille 2-par-3, avec une distribution normale centrée réduite.
Dans l'exemple suivant, nous dessinons la distribution de 1000 nombres
uniformes produits par rand
.
r=rand(1000,1,"uniform"); scf(); histplot(10,r); xtitle("Nombres uniformes par rand","X","Fréquence") | ![]() | ![]() |
Dans l'exemple suivant, nous dessinons la distribution de nombres normaux
centrés réduits produits par rand
.
Le générateur pseudo-aléatoire "uniform" est une séquence déterministe dont le but est de reproduire une séquence de nombres aléatoire, indépendents et identiquement distribués dans l'intervalle [0,1[.
Dans le but de pouvoir obtenir des simulations reproductibles,
la graine initiale du générateur est zéro, de telle sorte que la séquence est
la même d'une session à l'autre.
En d'autres termes, les premiers nombres produits
par rand
sont toujours : 0.2113249, 0.7560439, ...
Dans certains cas, nous pourrions vouloir initialiser la
graine du générateur dans le but de produire des séquences moins prévisibles.
Dans cette situation, nous pouvons initialiser la graine avec la sortie de la
fonction getdate
, comme dans l'exemple suivant:
n=getdate("s"); rand("seed",n); | ![]() | ![]() |
Le générateur de nombres aléatoires "uniform"
est
décrit dans
"Urand, A Universal Random Number Generator" par
Michael A. Malcolm, Cleve B. Moler, Stan-Cs-73-334, January 1973, Computer
Science Department, School Of Humanities And Sciences, Stanford University.
C'est un générateur linéaire à congruence de la forme :
x = (a x + c) mod M
pour lequel les constantes sont :
a = 843314861 |
c = 453816693 |
M = 231 |
D'après les auteurs, ce générateur est de longueur complète, c'est à dire que sa période est M = 231 = 2147483648.
Le générateur de nombres aléatoires "normal"
est fondés sur la méthode de Box-Muller, pour lequel la
source de nombres uniformes est Urand.
La fonction grand dispose de générateurs aléatoires produisant
des séquences de nombres qui possèdent de meilleures qualités statistiques.
Par conséquent, dans les situations où la qualité statistique des séquences de
nombres aléatoires est importante, nous devrions plutôt utiliser la fonction grand
.
De plus, la fonction grand
fournit davantage de fonctionnalités.