next up previous contents index
Next: 5.2.6 Les fonctions de Up: Génération de nombres aléatoires Previous: 5.2.4 Dessiner un histogramme

5.2.5 La fonction grand

Pour des simulations lourdes qui utilisent beaucoup de nombres aléatoires la fonction standard rand avec sa période de $2^{31} (\simeq 2.147\;10^9)$ est peut être   un peu juste. Depuis la version 2.4 Scilab est équipé d'un générateur de luxe grand qui permet aussi de simuler toutes les lois classiques. grand s'utilise presque de la même manière que rand, c-a-d que l'on peut utiliser l'une des deux syntaxes suivantes (pour la deuxième il faut évidemment que la matrice A soit définie au moment de l'appel) :
  grand(n,m,loi, [p1, p2, ...])
  grand(A,loi, [p1, p2, ...])
loi est une chaîne de caractères précisant la loi, celle-ci étant suivie de ses paramètres éventuels. Quelques exemples (pour obtenir un échantillon de m réalisations, sous la forme d'un vecteur colonne) :
1.
une loi uniforme sur les entiers de l'intervalle [1, 2147483562] :
     X = grand(m,1,"lgi")
(ce type de générateur constitue la base de grand, voir plus loin) ;
2.
une loi uniforme sur les entiers de l'intervalle [n1, n2] :
     X = grand(m,1,"uin",n1,n2)
(il faut que $n2-n1 \le 2147483561$ mais dans le cas contraire ce problème est signalé par un message d'erreur) ;
3.
pour la loi uniforme sur ]0,1[ (c-a-d que et 1 ne sont jamais obtenus) :
     X = grand(m,1,"def")
(celui-ci est obtenu en divisant les nombres issus du générateur basique par 2147483563)
4.
pour la loi uniforme sur ]a,b[ (a et b ne sont jamais obtenus) :
     X = grand(m,1,"unf",a,b)
5.
pour la loi binomiale B(N,p) :
     X = grand(m,1,"bin",N,p)
6.
pour la loi de Poisson de moyenne $\mu$ :
     X = grand(m,1,"poi",mu)
7.
pour la loi normale de moyenne $\mu$ et d'écart type $\sigma$ :
     X = grand(m,1,"nor",mu,sigma)
Il y en a bien d'autres (cf la page d'aide).

La base de grand est constituée par un générateur avec une très longue période ($2.3\;10^{18}$), ce générateur étant scindé en 32 générateurs << virtuels >>, chacun d'eux pouvant fournir 220=1 048 576 << blocs >> de nombres, chaque bloc contenant 230=1 073 741 824 nombres appartenant à l'intervalle entier [1 , 2 147 483 562] (d'après la page d'aide...!!). On peut passer d'un générateur virtuel à l'autre avec :

  grand('setcgn',G)
$G=1,2,\dots, 32$ et récupérer le générateur (virtuel) courant avec :
  G = grand('getcgn',G)
(par défaut G=1) et il y a aussi des possibilités d'initialisation (il faut 2 germes). Bref il y a de quoi faire...


next up previous contents index
Next: 5.2.6 Les fonctions de Up: Génération de nombres aléatoires Previous: 5.2.4 Dessiner un histogramme
Pincon Bruno
6/23/2000