1
Génération de nombres aléatoires en Scilab
1. Simulation par la fonction rand d’une variable
a. Génération d’un nombre choisi au hasard dans : rand() --> rand()
ans = 0.2113249
b. Génération de nm nombres présentés matriciellement : rand(n,m) --> rand(2,3)
ans =
0.7560439 0.3303271 0.6283918 0.0002211 0.6653811 0.8497452
c. Génération de nm nombres où --> rand('normal') --> rand(2,3) ans =
0.3646823 -0.7335813 0.8915736 0.742627 0.1034169 1.2429915
2. Simulation de toutes les lois du programme par grand
a. Loi uniforme discrète sur [a,b] : grand(n,m,’uin’,a,b)
--> n=input('entrez la valeur du nombre n de lignes :') entrez la valeur du nombre n de lignes :2
n = 2.
--> m=input('entrez la valeur du nombre m de colonnes :') entrez la valeur du nombre m de colonnes :3
m = 3.
--> grand(n,m,'uin',2,5) ans =
2. 4. 2.
4. 3. 5.
2
b. Loi binomiale : grand(n,m,’bin’,N,p) --> grand(2,3,'bin',3,0.5)
ans =
3. 2. 0.
1. 1. 2.
c. Loi géométrique : grand(n,m,’geom’,p) --> grand(2,3,'geom',0.5)
ans =
1. 2. 5.
1. 8. 9.
d. Loi de Poisson : grand(n,m,’poi’,λ) --> grand(2,3,'poi',5)
ans =
9. 3. 10.
9. 6. 10.
e. Loi uniforme continue : grand(n,m,’unf’,a,b) --> grand(2,3,'unf',-1,1)
ans =
0.9143339 -0.0292487 0.6005609 -0.7802765 0.5962117 -0.4059411
f. Loi exponentielle : grand(n,m,’exp’,1/ ) --> grand(2,3,'exp',1/5)
ans =
0.304277 0.2760385 0.1168829 1.0153205 0.5045783 0.0698225
3
g. Loi normale : grand(n,m,’nor’,m, ) --> grand(2,3,'nor',3,2)
ans =
4.9339148 1.5079902 4.7020209 3.6912835 3.2529529 4.7220187
3. Retour sur la signification de la génération de valeurs prises par une variable X qui suit une loi donnée
a. Exemple de la loi de Poisson Soit
Le Scilab permet d’obtenir facilement des valeurs de :
--> N=input('Entrer la valeur de N : '),
for i=0:N do p=exp(-5)*5^i/factorial(i);disp([i,p]);end Entrer la valeur de N : 20
N = 20.
0. 0.0067379 1. 0.0336897 2. 0.0842243 3. 0.1403739 4. 0.1754674 5. 0.1754674 6. 0.1462228 7. 0.1044449 8. 0.065278 9. 0.0362656 10. 0.0181328 11. 0.0082422 12. 0.0034342 13. 0.0013209
4 14. 0.0004717
15. 0.0001572 16. 0.0000491 17. 0.0000145 18. 0.000004 19. 0.0000011 20. 0.0000003
Il ressort que (X=4) et (X=5) sont les événements qui ont la probabilité d’occurrence la plus élevée : 17,5%.
La génération d’1 000 000 de valeurs prises par X qui suit une loi de Poisson conduit au même résultat :
--> x=grand(1000,1000,'poi',5);m=tabul(x,'i') m =
0. 6649.
1. 33639.
2. 84392.
3. 139917.
4. 175162.
5. 175587.
6. 146425.
7. 104474.
8. 65590.
9. 36272.
10. 18179.
11. 8275.
12. 3485.
13. 1306.
14. 432.
15. 157.
16. 42.
17. 12.
18. 4.
19. 1.
5
Il ressort, en effet que, sur 1 000 000 de nombres générés, le nombre 4 est apparu 175 162 fois et le nombre 5 est apparu 175 587 fois ; la fréquence d’apparition de chacun de ces 2 nombres est bien de 17,5%.
b. Exemple de la loi géométrique Soit
Le Scilab permet d’obtenir facilement des valeurs de : --> N=input('Entrer la valeur de N : '), for i=1:N do p=0.9^(i-1)*0.1;disp([i,p]);end Entrer la valeur de N : 10
N = 10.
1. 0.1 2. 0.09 3. 0.081 4. 0.0729 5. 0.06561 6. 0.059049 7. 0.0531441 8. 0.0478297 9. 0.0430467 10. 0.038742
Il ressort que plus i est grand, plus est petit.
La génération d’1 000 000 de valeurs prises par X qui suit une loi de géométrique conduit au même résultat ; en outre, en divisant chacun des nombres de la 2ème colonne par 1 000 000, on retrouve les probabilités de leur obtention :
--> x=grand(1000,1000,'geom',0.1);m=tabul(x,'i') m =
1. 99814.
2. 89469.
3. 81414.
4. 72690.
5. 66581.
6. 58887.
7. 53034.
8. 47863.
6
9. 43278.
10. 38876.
11. 34856.
…
117. 1.
127. 1.
138. 1.
4. Méthode d’inversion
a. Simulation de X qui est une variable aléatoire discrète i. Théorème
Soit avec
Soit U Dès lors :
et :
ii. Exemple 1 d’une variable de Bernoulli
Soit U
D’après le théorème d’inversion :
Or : et
Donc :
Ainsi, la simulation de valeurs de X en Scilab :
--> p=input('Entrez la valeur de p : ') Entrez la valeur de p : 0.2
p = 0.2
7
--> if rand()>1-p then x=1, else x=0, end x =
0.
iii. Exemple 2 d’une variable géométrique Soit
Soit U
D’après le théorème d’inversion :
Or : et
Donc :
Pour
Or :
Donc :
Pour
Donc :
Ainsi est réalisé si k est le plus petit entier tel que Tant que , on ajoute 1.
Par conséquent, en Scilab :
--> p=input('Entrez la valeur de p : ') Entrez la valeur de p : 0.3
p = 0.3
--> k=1;u=rand(); while u>1-(1-p)^k do u=rand();k=k+1;end,
8
--> disp(k, 'la valeur de X est : ') la valeur de X est :
1.
On peut également poursuivre les calculs :
Or , donc :
Par conséquent, en Scilab :
--> p=input('Entrez la valeur de p : ') Entrez la valeur de p : 0.3
p = 0.3
--> X=1+floor(log(1-rand())/log(1-p)) X =
4.
9
10
b. Simulation de X qui est une variable à densité i. Théorème
Soit U Dès lors :
ii. Exemple 1 d’une variable exponentielle Soit
Soit U
D’après le théorème d’inversion :
• Pour :
car est strictement croissante
• Pour : U
Donc, pour
Ainsi : X et suivent la même loi
Par conséquent, en Scilab :
--> lambda=input('Entrez la valeur de lambda : ') Entrez la valeur de lambda : 5
lambda = 5.
--> x=-log(1-rand())/lambda x =
11 0.197983
iii. Exemple 2 d’une variable de Rayleigh
Soit U
D’après le théorème d’inversion :
Comme est strictement croissante :
Comme est strictement croissante sur :
Si
Ainsi, X et suivent la même loi
Par conséquent, en Scilab :
--> x=sqrt(-2*log(1-rand())) x =
0.0210314