11
11
* http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
14
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" version="5.0-subset Scilab" xml:lang="fr" xml:id="grand">
16
<refname>grand</refname>
17
<refpurpose> Générateur de nombres pseudo-aléatoires</refpurpose>
20
<title>Séquence d'appel</title>
22
Y=grand(m,n,"bet",A,B)
23
Y=grand(m,n,"bin",N,p)
24
Y=grand(m,n,"nbn",N,p)
25
Y=grand(m,n,"chi", Df)
26
Y=grand(m,n,"nch",Df,Xnon)
28
Y=grand(m,n,"f",Dfn,Dfd)
29
Y=grand(m,n,"nf",Dfn,Dfd,Xnon)
30
Y=grand(m,n,"gam",shape,scale)
31
Y=grand(m,n,"nor",Av,Sd)
32
Y=grand(m,n,"geom", p)
35
Y=grand(m,n,"unf",Low,High)
36
Y=grand(m,n,"uin",Low,High)
41
Y=grand(n,"mn",Mean,Cov)
42
Y=grand(n,"markov",P,x0)
49
S=grand("phr2sd",phrase)
59
grand("setall",s1,s2,s3,s4)
65
<title>Paramètres</title>
71
entiers, dimensions de la matrice de nombres aléatoires à obtenir <literal>Y</literal>
79
une matrice (ou un vecteur) dont seules les dimensions (<literal>m</literal>-par-<literal>n</literal>) sont utilisées
87
une matrice de doubles de taille <literal>m</literal>-par-<literal>n</literal>, les nombres aléatoires
95
résultat de l'action (une chaîne ou un vecteur colonne)
102
<title>Description</title>
104
Cette fonction produit des nombres aléatoires selon différentes distributions.
107
Les séquences d'appel :
110
Y=grand(m,n,"bet",A,B)
111
Y=grand(m,n,"bin",N,p)
112
Y=grand(m,n,"nbn",N,p)
113
Y=grand(m,n,"chi", Df)
114
Y=grand(m,n,"nch",Df,Xnon)
115
Y=grand(m,n,"exp",Av)
116
Y=grand(m,n,"f",Dfn,Dfd)
117
Y=grand(m,n,"nf",Dfn,Dfd,Xnon)
118
Y=grand(m,n,"gam",shape,scale)
119
Y=grand(m,n,"nor",Av,Sd)
120
Y=grand(m,n,"geom", p)
121
Y=grand(m,n,"poi",mu)
123
Y=grand(m,n,"unf",Low,High)
124
Y=grand(m,n,"uin",Low,High)
128
produisent une matrice de taille <literal>m</literal>-par-<literal>n</literal>
129
avec des entrées aléatoires.
132
La séquence d'appel :
138
où <literal>X</literal> est une matrice de taille <literal>m</literal>-par-<literal>n</literal>,
139
produit le même effet.
140
Dans ce cas, seule la taille de la matrice <literal>X</literal> est utilisée.
143
Les séquences d'appel :
146
Y=grand(n,"mn",Mean,Cov)
147
Y=grand(n,"markov",P,x0)
148
Y=grand(n,"mul",nb,P)
149
Y=grand(n,"prm",vect)
152
produisent une matrice de taille <literal>m</literal>-par-<literal>n</literal>
153
avec des entrées aléatoires.
156
Les séquences d'appel :
165
S=grand("phr2sd",phrase)
172
grand("setall",s1,s2,s3,s4)
177
configurent ou interrogent les générateurs aléatoires.
181
<title>Générer des nombres aléatoires selon une loi donnée</title>
187
<literal>Y=grand(m,n,"bet",A,B)</literal> génère des nombres aléatoires suivant
188
la loi beta de paramètres <literal>A</literal> and <literal>B</literal>.
189
La densité de cette loi est <latex><![CDATA[(0 < x < 1)]]></latex> :
193
\dfrac{x^{A-1}(1-x)^{B-1}}{\beta(A,B)}
197
<literal>A</literal> et <literal>B</literal> devant être des réels <latex><![CDATA[>10^{-37}]]></latex>.
198
Fonction(s) associée(s) : <link linkend="cdfbet">cdfbet</link>.
203
<term>binomiale</term>
206
<literal>Y=grand(m,n,"bin",N,p)</literal> génère des nombres aléatoires suivant la loi
207
binomiale de paramètres <literal>N</literal> (entier str. positif) et <literal>p</literal>
208
(réel de [0,1]) : nombre de succès au cours de <literal>N</literal> épreuves de Bernouilli
209
de probabilité de succès <literal>p</literal>.
210
Fonctions associées : <link linkend="binomial">binomial</link>, <link linkend="cdfbin">cdfbin</link>.
215
<term>binomiale négative</term>
218
<literal>Y=grand(m,n,"nbn",N,p)</literal> génère des nombres aléatoires suivant la loi binomiale
219
négative de paramètres <literal>N</literal> (entier str. positif) et <literal>p</literal> (réel
220
de ]0,1[) : nombre d'échecs avant d'obtenir <literal>N</literal> succès dans des épreuves
221
de Bernouilli de probabilité de succès <literal>p</literal>.
222
Fonction associée : <link linkend="cdfnbn">cdfnbn</link>.
230
<literal>Y=grand(m,n,"chi", Df)</literal> génère des nombres aléatoires suivant la loi du chi 2
231
à <literal>Df</literal> (réel > 0.0) degrés de liberté.
232
Fonction associée : <link linkend="cdfchi">cdfchi</link>.
237
<term>chi 2 non centrée</term>
240
<literal>Y=grand(m,n,"nch",Df,Xnon)</literal> génère des nombres aléatoires suivant la loi du chi 2
241
non centrée à <literal>Df</literal> degrés de liberté (réel >= 1.0)
242
le paramètre de décentrage étant <literal>Xnonc</literal> (réel >= 0.0).
243
Fonction associée : <link linkend="cdfchn">cdfchn</link>.
248
<term>exponentielle</term>
251
<literal>Y=grand(m,n,"exp",Av)</literal> génère des nombres aléatoires suivant la loi exponentielle
252
de moyenne <literal>Av</literal> (réel >= 0.0).
257
<term>F variance ratio</term>
260
<literal>Y=grand(m,n,"f",Dfn,Dfd)</literal> génère des nombres aléatoires suivant la loi F
261
(variance ratio) à <literal>Dfn</literal> (réel > 0.0) degrés de liberté au numérateur et
262
<literal>Dfd</literal> (réel > 0.0) degrés de liberté au dénominateur.
263
Fonction associée : <link linkend="cdff">cdff</link>.
268
<term>non central F variance ratio</term>
271
<literal>Y=grand(m,n,"nf",Dfn,Dfd,Xnon)</literal> génère des nombres aléatoires suivant la loi
272
F (variance ratio) non centrée à <literal>Dfn</literal> (réel >= 1) degrés de liberté
273
au numérateur, et <literal>Dfd</literal> (réel > 0) degrés de liberté au dénominateur,
274
<literal>Xnonc</literal> (réel >= 0) étant le paramètre de décentrage.
275
Fonction associée : <link linkend="cdffnc">cdffnc</link>.
283
<literal>Y=grand(m,n,"gam",shape,scale)</literal> génère des nombres aléatoires suivant la loi
284
gamma de paramètres <literal>shape</literal> (réel > 0) et <literal>scale</literal>
285
(réel > 0). La densité est :
289
\dfrac{ \textrm{scale}^{\textrm{shape}} x^{\textrm{shape}-1} e^{-\textrm{scale} x}}{\gamma(\textrm{shape}) }
293
Fonctions associées : <link linkend="gamma">gamma</link>, <link linkend="cdfgam">cdfgam</link>.
298
<term>Gauss Laplace (normale)</term>
301
<literal>Y=grand(m,n,"nor",Av,Sd)</literal> génère des nombres aléatoires suivant la loi normale
302
de moyenne <literal>Av</literal> (réel) et d'écart type <literal>Sd</literal>
304
Fonctions associées : <link linkend="cdfnor">cdfnor</link>, <link linkend="erf">erf</link>.
309
<term>multi normale</term>
312
<literal>Y=grand(n,"mn",Mean,Cov)</literal> génère <literal>n</literal> réalisations indépendantes de la
313
loi multi-normale ; <literal>Mean</literal> doit être un vecteur <literal>m</literal>-par-<literal>1</literal> et <literal>Cov</literal>
314
une matrice <literal>m</literal>-par-<literal>m</literal> symétrique et définie positive, (<literal>Y</literal> est alors une
315
matrice <literal>m</literal>-par-<literal>n</literal>).
320
<term>geometrique</term>
323
<literal>Y=grand(m,n,"geom", p)</literal>
324
génère des nombres aléatoires suivant la loi
325
geométrique de paramètre <literal>p</literal> : nombre
326
d'épreuves de Bernouilli (de probabilité de succès
327
<literal>p</literal>) jusqu'à obtenir un succès
328
(<literal>p</literal> doit appartenir à l'intervalle
329
<latex>[p_{min},1]</latex> (avec <latex> p_{min} = 1{,}3\times 10^{-307} </latex>).
332
<literal>Y</literal> contient des nombres réels
333
positifs à valeur entière qui sont "le nombre de
334
tentatives nécessaire pour obtenir un succès" pour
343
<literal>Y=grand(n,"markov",P,x0)</literal> génère <literal>n</literal> états successifs d'une chaîne de
344
Markov décrite par la matrice de transition <literal>P</literal>. L'état initial est donné par
345
<literal>x0</literal>. Si <literal>x0</literal> est une matrice de taille
346
<literal>m=size(x0,"*")</literal>
347
alors <literal>Y</literal> est une matrice de taille <literal>m x n</literal>. <literal>Y(i,:)</literal> étant le
348
chemin à partir de l'état initial <literal>x0(i)</literal>.
353
<term>multinomiale</term>
356
<literal>Y=grand(n,"mul",nb,P)</literal> génère <literal>n</literal> réalisations indépendantes de la loi
357
Multinomiale : classer <literal>nb</literal> éventualités dans <literal>m</literal> catégories (mettre
358
<literal>nb</literal> "boules" dans <literal>m</literal> "boites"). <literal>P(i)</literal>
359
étant la probabilité qu'une éventualité soit de categorie i. <literal>P</literal> le vecteur des
360
probabilités est de taille <literal>m-1</literal> (la probabilté de la catégorie <literal>m</literal>
361
étant <literal>1-sum(P)</literal>). <literal>Y</literal> est alors de dimensions <literal>m x n</literal>,
362
chaque colonne <literal>Y(:,j)</literal> étant une réalisation de cette loi : <literal>Y(i,j)</literal>
363
est le nombre d'éventualités classées en catégorie <literal>i</literal> pour la <literal>j</literal> ème
364
réalisation (<literal>sum(Y(:,j)) = nb</literal>).
372
<literal>Y=grand(m,n,"poi",mu)</literal> génère des nombres aléatoires suivant la loi de Poisson
373
de moyenne <literal>mu</literal> (réel >= 0.0).
374
Fonction associée : <link linkend="cdfpoi">cdfpoi</link>.
379
<term>permutations aléatoires</term>
382
<literal>Y=grand(n,"prm",vect)</literal> génère <literal>n</literal> permutations aléatoire du
383
vecteur colonne (<literal>m x 1</literal>) <literal>vect</literal>.
388
<term>uniforme (def)</term>
391
<literal>Y=grand(m,n,"def")</literal> génère des nombres aléatoires suivant la loi uniforme
392
sur <literal>[0,1[</literal> (1 n'est jamais retourné).
397
<term>uniforme (unf)</term>
400
<literal>Y=grand(m,n,"unf",Low,High)</literal> génère des nombres aléatoires suivant la loi
401
uniforme sur <literal>[Low, High[</literal> (<literal>High</literal> is never return).
406
<term>uniforme (uin)</term>
409
<literal>Y=grand(m,n,"uin",Low,High)</literal> génère des entiers aléatoires suivant la loi uniforme
410
sur <literal>[Low, High]</literal>. <literal>High</literal>
411
et <literal>Low</literal> doivent être des entiers tels que <literal>
420
<term>uniforme (lgi)</term>
423
<literal>Y=grand(m,n,"lgi")</literal> retourne la sortie du générateur de base courant : des entiers
424
aléatoires suivant une loi uniforme sur :
429
<literal>[0, 2^32 - 1]</literal> for mt, kiss and fsultra;
434
<literal>[0, 2147483561]</literal> for clcg2;
439
<literal>[0, 2^31 - 2]</literal> for clcg4;
444
<literal>[0, 2^31 - 1]</literal> for urand.
453
<title>Actions sur le(s) générateur(s) de base</title>
455
Depuis Scilab-2.7 vous avez la possibilité de choisir parmi plusieurs générateurs de base
456
(donnant des entiers aléatoires suivant la loi "lgi") :
463
Le Mersenne-Twister de M. Matsumoto and T. Nishimura, période d'environ <literal>2^19937</literal>,
464
état interne donné par <literal>624</literal> entiers (plus un index); c'est le générateur
473
Le Keep It Simple Stupid de G. Marsaglia, période d'environ <literal>2^123</literal>,
474
état interne donné par <literal>4</literal> entiers.
482
Une combinaison de 2 générateurs linéaires congruentiels de P. L'Ecuyer,
483
période d'environ <literal>2^61</literal>, état interne donné par <literal>2</literal> entiers ;
484
c'était le seul générateur de base utilisé auparavent par grand (cette
485
version est cependant légèrement différente de l'ancienne).
493
Une combinaison de 4 générateurs linéaires congruentiels de P. L'Ecuyer,
494
période d'environ <literal>2^121</literal>, état interne donné par 4 entiers ; ce générateur
495
peut être partagé en <literal>101</literal> générateur virtuels (en fait la suite de
496
longueur <literal>2^121</literal> peut être découpée en <literal>101</literal> sous-suites) ce qui peut
497
être utile dans certains cas (voir 'Actions specifiques à clcg4' et
498
'Exemple d'utilisation de clcg4').
506
Un générateur SWB (subtract-with-borrow) mixé avec un générator congruentiel
507
concu par Arif Zaman et George Marsaglia. Sa période est supérieure à <literal>10^356</literal>,
508
et son état interne est constitué d'un tableau de 37 entiers, d'un index sur
509
ce tableau et d'un drapeau (0 ou 1) ainsi qu'un autre entier donnant l'état interne
510
du générateur congruentiel.
518
Le générateur de base utilisé par la fonction
519
<link linkend="rand">rand</link>, état interne constitué d'un entier, période de
520
<literal>2^31</literal>.
521
Ce generateur est fondé sur "Urand, A Universal Random Number Generator" By,
522
Michael A. Malcolm, Cleve B. Moler, Stan-Cs-73-334, January 1973, Computer
523
Science Department, School Of Humanities And Sciences, Stanford University.
524
C'est le plus rapide de cette liste, mais ses qualités statistiques
525
sont inférieures aux autres générateurs.
532
<title>Actions</title>
535
<term>action= "getgen"</term>
538
<literal>S=grand("getgen")</literal> retourne le nom du générateur de base actuel (<literal>S</literal> est
539
l'une des chaînes de caractères "mt", "kiss", "clcg2", "clcg4", "urand",
545
<term>action= "setgen"</term>
548
<literal>grand("setgen",gen)</literal> permet de changer le générateur de base : <literal>gen</literal>
549
doit être l'une des chaînes de caractères "mt", "kiss", "clcg2", "clcg4", "urand", "fsultra".
550
En cas de succès la fonction retourne cette même chaîne.
555
<term>action= "getsd"</term>
558
<literal>S=grand("getsd")</literal> retourne l'état interne actuel (les 'germes' dans l'ancienne
559
appelation quoique ce terme désigne plutôt l'état initial) du générateur de base courant ;
560
<literal>S</literal> est un vecteur colonne (d'entiers) de dimension <literal>625</literal>
561
pour mt (la première composante étant un 'index' sur l'état, c-a-d un entier de l'intervalle
562
<literal>[1,624]</literal>), <literal>4</literal>
563
pour kiss, <literal>2</literal> pour clcg2 , <literal>40</literal>pour fsultra, <literal>4</literal> pour clcg4
564
(pour ce dernier vous obtenez l'état interne du générateur virtuel courant), et <literal>1</literal>
570
<term>action= "setsd"</term>
573
<literal>grand("setsd",S), grand("setsd",s1[,s2,s3,s4])</literal> impose l'état interne du générateur de
581
<literal>S</literal> est un vecteur d'entiers de dimension <literal>625</literal> (la première composante
582
étant un index sur <literal>[1,624]</literal>), les <literal>624</literal> dernières composantes doivent
583
être dans <literal>[0,2^32[</literal>) (mais ne doivent pas être toutes nulles) ; une initialisation
584
plus simple est possible (et recommandée) en donnant un seul entier <literal>s1</literal> (<literal>s1</literal> appartenant
585
à <literal>[0,2^32[</literal>) ;
590
<term>pour kiss</term>
593
<literal>4</literal> entiers <literal>s1,s2, s3,s4</literal> dans <literal>[0,2^32[</literal> doivent être
599
<term>pour clcg2</term>
602
<literal>2</literal> entiers <literal>s1</literal> dans <literal>[1,2147483562]</literal> et <literal>s2</literal>
603
dans <literal>[1,2147483398]</literal> doivent être fournis ;
608
<term>pour clcg4</term>
611
<literal>4</literal> entiers <literal>s1</literal> dans <literal>[1,2147483646]</literal>, <literal>s2</literal>
612
dans <literal>[1,2147483542]</literal>, <literal>s3</literal> dans <literal>[1,2147483422]</literal>,
613
<literal>s4</literal> dans <literal>[1,2147483322]</literal> sont requis ;
614
<literal>ATTENTION</literal> : avec clcg4 vous positionnez l'état interne du générateur virtuel
615
courant mais vous perdez alors la synchronisation avec les autres générateurs virtuels.
616
(=> si vous utilisez clcg4 avec différents générateurs virtuels, il faut utiliser
617
l'option "setall" qui permet de changer l'état interne (du générateur numéro 0) tout en
618
recalculant l'état initial des 100 autres générateurs virtuels).
623
<term>pour urand</term>
626
<literal>1</literal> entier <literal>s1</literal> appartenant à
627
<literal>[0,2^31[</literal> est requis.
632
<term>for fsultra</term>
635
<literal>S</literal> est un vecteur de <literal>40</literal> entiers (son premier élément doit être dans
636
l'intervalle<literal>[0,37]</literal>, son deuxième (drapeau) doit être 0 ou 1, le troisième un
637
entier de <literal>[1,2^32[</literal> et les 37 composantes suivantes, des entiers de <literal>[0,2^32[</literal>) ; il est recommandé
638
d'utiliser l'autre procédure d'initialisation (plus simple) avec deux entiers <literal>s1</literal> et
639
<literal>s2</literal> de <literal>[0,2^32[</literal>.
647
<term>action= "phr2sd"</term>
650
<literal>Sd=grand("phr2sd", phrase)</literal> étant donnée une chaîne de caractères <literal>phrase</literal>
651
cet appel retourne un vecteur <literal>1 x 2</literal> qui peut être utilisé comme
652
état interne pour un générateur de base (initialement adapté pour clcg2).
659
<title>Options specifiques à clcg4</title>
661
Le générateur clcg4 peut être utilisé comme les autres mais il offre l'avantage de pouvoir être
662
découpé en (<literal>101</literal>) générateurs virtuels différents, c-a-d avec des séquences sans
663
intersection (quand vous utilisez un générateur classique vous pouvez changer l'état initial
664
de façon à obtenir une autre séquence mais vous n'êtes pas complètement sûr d'obtenir une
665
séquence complètement différente). Chaque générateur virtuel correspond à une séquence de
666
longueur <literal>2^72</literal> qui est de plus découpée en <literal>V=2^31</literal> segments de longueur
667
<literal>W=2^41</literal>. Pour un générateur virtuel donné vous pouvez retourner au début de la séquence
668
ou au début du segment ou bien au début du segment suivant.
669
Vous pouvez aussi changer l'état initial du générateur <literal>0</literal> avec l'option
670
"setall" qui recalcule l'état initial des autres générateurs virtuels de sorte à obtenir
671
la synchronisation entre les générateurs (c-a-d qu'en fonction du nouvel état initial du générateur
672
<literal>0</literal> l'état initial des générateurs <literal>1..100</literal> sont recalculés de façon à
673
obtenir <literal>101</literal> séquences qui ne s'intersectent pas).
677
<term>action= "setcgn"</term>
680
<literal>grand("setcgn",G)</literal> sélectionne le générateur virtuel numéro <literal>G</literal> :
681
lorsque le générateur de base courant est clcg4, c'est le générateur virtuel <literal>G</literal>
682
qui sera alors utilisé ; les <literal>101</literal> générateurs virtuels sont numérotés
683
<literal>0,1,...,100</literal> (ainsi <literal>G</literal> doit être un entier de l'intervalle
684
<literal>[0,100]</literal>) ; par défaut le générateur virtuel courant est celui de numéro
685
<literal>0</literal>.
690
<term>action= "getcgn"</term>
693
<literal>S=grand("getcgn")</literal> retourne le numéro du générateur
699
<term>action= "initgn"</term>
702
<literal>grand("initgn",I)</literal> réinitialise l'état du générateur virtuel courant :
708
<para>remet l'état à sa valeur initiale</para>
714
<para>remet l'état au début du segment courant</para>
721
positionne l'état au début du segment suivant et met à jour les valeurs définissant
722
le segment courant (vous ne pouvez pas revenir au début du segment précédent).
730
<term>action= "setall"</term>
733
<literal>grand("setall",s1,s2,s3,s4)</literal> impose l'état interne du générateur virtuel
734
de numéro <literal>0</literal> à <literal>s1,s2,s3,s4</literal>. L'état initial des autres générateurs est
735
alors reconstruit (de façon à obtenir 101 séquences qui ne s'intersectent pas). Voir
736
l'action "setsd" pour les contraintes sur <literal>s1, s2, s3, s4</literal>.
741
<term>action= "advnst"</term>
744
<literal>grand("advnst",K)</literal> avance l'état du générateur virtuel courant de <literal>2^K</literal>
745
valeurs et réinitialise l'état initial (du générateur virtuel courant) à
753
<title>Exemples</title>
755
Dans l'exemple suivant, nous produisons des nombres aléatoires
756
associés à différentes lois de distribution et dessinons les histogrammes
759
<programlisting role="example"><![CDATA[
14
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" version="5.0-subset Scilab" xml:lang="fr" xml:id="grand">
16
<refname>grand</refname>
17
<refpurpose> Générateur de nombres pseudo-aléatoires</refpurpose>
20
<title>Séquence d'appel</title>
22
Y=grand(m,n,"bet",A,B)
23
Y=grand(m,n,"bin",N,p)
24
Y=grand(m,n,"nbn",N,p)
25
Y=grand(m,n,"chi", Df)
26
Y=grand(m,n,"nch",Df,Xnon)
28
Y=grand(m,n,"f",Dfn,Dfd)
29
Y=grand(m,n,"nf",Dfn,Dfd,Xnon)
30
Y=grand(m,n,"gam",shape,scale)
31
Y=grand(m,n,"nor",Av,Sd)
32
Y=grand(m,n,"geom", p)
35
Y=grand(m,n,"unf",Low,High)
36
Y=grand(m,n,"uin",Low,High)
41
Y=grand(n,"mn",Mean,Cov)
42
Y=grand(n,"markov",P,x0)
49
S=grand("phr2sd",phrase)
59
grand("setall",s1,s2,s3,s4)
65
<title>Paramètres</title>
71
entiers, dimensions de la matrice de nombres aléatoires à obtenir <literal>Y</literal>
79
une matrice (ou un vecteur) dont seules les dimensions (<literal>m</literal>-par-<literal>n</literal>) sont utilisées
87
une matrice de doubles de taille <literal>m</literal>-par-<literal>n</literal>, les nombres aléatoires
95
résultat de l'action (une chaîne ou un vecteur colonne)
102
<title>Description</title>
104
Cette fonction produit des nombres aléatoires selon différentes distributions.
107
Les séquences d'appel :
110
Y=grand(m,n,"bet",A,B)
111
Y=grand(m,n,"bin",N,p)
112
Y=grand(m,n,"nbn",N,p)
113
Y=grand(m,n,"chi", Df)
114
Y=grand(m,n,"nch",Df,Xnon)
115
Y=grand(m,n,"exp",Av)
116
Y=grand(m,n,"f",Dfn,Dfd)
117
Y=grand(m,n,"nf",Dfn,Dfd,Xnon)
118
Y=grand(m,n,"gam",shape,scale)
119
Y=grand(m,n,"nor",Av,Sd)
120
Y=grand(m,n,"geom", p)
121
Y=grand(m,n,"poi",mu)
123
Y=grand(m,n,"unf",Low,High)
124
Y=grand(m,n,"uin",Low,High)
128
produisent une matrice de taille <literal>m</literal>-par-<literal>n</literal>
129
avec des entrées aléatoires.
132
La séquence d'appel :
138
où <literal>X</literal> est une matrice de taille <literal>m</literal>-par-<literal>n</literal>,
139
produit le même effet.
140
Dans ce cas, seule la taille de la matrice <literal>X</literal> est utilisée.
143
Les séquences d'appel :
146
Y=grand(n,"mn",Mean,Cov)
147
Y=grand(n,"markov",P,x0)
148
Y=grand(n,"mul",nb,P)
149
Y=grand(n,"prm",vect)
152
produisent une matrice de taille <literal>m</literal>-par-<literal>n</literal>
153
avec des entrées aléatoires.
156
Les séquences d'appel :
165
S=grand("phr2sd",phrase)
172
grand("setall",s1,s2,s3,s4)
177
configurent ou interrogent les générateurs aléatoires.
181
<title>Générer des nombres aléatoires selon une loi donnée</title>
187
<literal>Y=grand(m,n,"bet",A,B)</literal> génère des nombres aléatoires suivant
188
la loi beta de paramètres <literal>A</literal> and <literal>B</literal>.
189
La densité de cette loi est <latex><![CDATA[(0 < x < 1)]]></latex> :
193
\dfrac{x^{A-1}(1-x)^{B-1}}{\beta(A,B)}
197
<literal>A</literal> et <literal>B</literal> devant être des réels <latex><![CDATA[>10^{-37}]]></latex>.
198
Fonction(s) associée(s) : <link linkend="cdfbet">cdfbet</link>.
203
<term>binomiale</term>
206
<literal>Y=grand(m,n,"bin",N,p)</literal> génère des nombres aléatoires suivant la loi
207
binomiale de paramètres <literal>N</literal> (entier str. positif) et <literal>p</literal>
208
(réel de [0,1]) : nombre de succès au cours de <literal>N</literal> épreuves de Bernouilli
209
de probabilité de succès <literal>p</literal>.
210
Fonctions associées : <link linkend="binomial">binomial</link>, <link linkend="cdfbin">cdfbin</link>.
215
<term>binomiale négative</term>
218
<literal>Y=grand(m,n,"nbn",N,p)</literal> génère des nombres aléatoires suivant la loi binomiale
219
négative de paramètres <literal>N</literal> (entier str. positif) et <literal>p</literal> (réel
220
de ]0,1[) : nombre d'échecs avant d'obtenir <literal>N</literal> succès dans des épreuves
221
de Bernouilli de probabilité de succès <literal>p</literal>.
222
Fonction associée : <link linkend="cdfnbn">cdfnbn</link>.
230
<literal>Y=grand(m,n,"chi", Df)</literal> génère des nombres aléatoires suivant la loi du chi 2
231
à <literal>Df</literal> (réel > 0.0) degrés de liberté.
232
Fonction associée : <link linkend="cdfchi">cdfchi</link>.
237
<term>chi 2 non centrée</term>
240
<literal>Y=grand(m,n,"nch",Df,Xnon)</literal> génère des nombres aléatoires suivant la loi du chi 2
241
non centrée à <literal>Df</literal> degrés de liberté (réel >= 1.0)
242
le paramètre de décentrage étant <literal>Xnonc</literal> (réel >= 0.0).
243
Fonction associée : <link linkend="cdfchn">cdfchn</link>.
248
<term>exponentielle</term>
251
<literal>Y=grand(m,n,"exp",Av)</literal> génère des nombres aléatoires suivant la loi exponentielle
252
de moyenne <literal>Av</literal> (réel >= 0.0).
257
<term>F variance ratio</term>
260
<literal>Y=grand(m,n,"f",Dfn,Dfd)</literal> génère des nombres aléatoires suivant la loi F
261
(variance ratio) à <literal>Dfn</literal> (réel > 0.0) degrés de liberté au numérateur et
262
<literal>Dfd</literal> (réel > 0.0) degrés de liberté au dénominateur.
263
Fonction associée : <link linkend="cdff">cdff</link>.
268
<term>non central F variance ratio</term>
271
<literal>Y=grand(m,n,"nf",Dfn,Dfd,Xnon)</literal> génère des nombres aléatoires suivant la loi
272
F (variance ratio) non centrée à <literal>Dfn</literal> (réel >= 1) degrés de liberté
273
au numérateur, et <literal>Dfd</literal> (réel > 0) degrés de liberté au dénominateur,
274
<literal>Xnonc</literal> (réel >= 0) étant le paramètre de décentrage.
275
Fonction associée : <link linkend="cdffnc">cdffnc</link>.
283
<literal>Y=grand(m,n,"gam",shape,scale)</literal> génère des nombres aléatoires suivant la loi
284
gamma de paramètres <literal>shape</literal> (réel > 0) et <literal>scale</literal>
285
(réel > 0). La densité est :
289
\dfrac{ \textrm{scale}^{\textrm{shape}} x^{\textrm{shape}-1} e^{-\textrm{scale} x}}{\gamma(\textrm{shape}) }
293
Fonctions associées : <link linkend="gamma">gamma</link>, <link linkend="cdfgam">cdfgam</link>.
298
<term>Gauss Laplace (normale)</term>
301
<literal>Y=grand(m,n,"nor",Av,Sd)</literal> génère des nombres aléatoires suivant la loi normale
302
de moyenne <literal>Av</literal> (réel) et d'écart type <literal>Sd</literal>
304
Fonctions associées : <link linkend="cdfnor">cdfnor</link>, <link linkend="erf">erf</link>.
309
<term>multi normale</term>
312
<literal>Y=grand(n,"mn",Mean,Cov)</literal> génère <literal>n</literal> réalisations indépendantes de la
313
loi multi-normale ; <literal>Mean</literal> doit être un vecteur <literal>m</literal>-par-<literal>1</literal> et <literal>Cov</literal>
314
une matrice <literal>m</literal>-par-<literal>m</literal> symétrique et définie positive, (<literal>Y</literal> est alors une
315
matrice <literal>m</literal>-par-<literal>n</literal>).
320
<term>geometrique</term>
323
<literal>Y=grand(m,n,"geom", p)</literal>
324
génère des nombres aléatoires suivant la loi
325
geométrique de paramètre <literal>p</literal> : nombre
326
d'épreuves de Bernouilli (de probabilité de succès
327
<literal>p</literal>) jusqu'à obtenir un succès
328
(<literal>p</literal> doit appartenir à l'intervalle
329
<latex>[p_{min},1]</latex> (avec <latex> p_{min} = 1{,}3\times 10^{-307} </latex>).
332
<literal>Y</literal> contient des nombres réels
333
positifs à valeur entière qui sont "le nombre de
334
tentatives nécessaire pour obtenir un succès" pour
343
<literal>Y=grand(n,"markov",P,x0)</literal> génère <literal>n</literal> états successifs d'une chaîne de
344
Markov décrite par la matrice de transition <literal>P</literal>. L'état initial est donné par
345
<literal>x0</literal>. Si <literal>x0</literal> est une matrice de taille
346
<literal>m=size(x0,"*")</literal>
347
alors <literal>Y</literal> est une matrice de taille <literal>m x n</literal>. <literal>Y(i,:)</literal> étant le
348
chemin à partir de l'état initial <literal>x0(i)</literal>.
353
<term>multinomiale</term>
356
<literal>Y=grand(n,"mul",nb,P)</literal> génère <literal>n</literal> réalisations indépendantes de la loi
357
Multinomiale : classer <literal>nb</literal> éventualités dans <literal>m</literal> catégories (mettre
358
<literal>nb</literal> "boules" dans <literal>m</literal> "boites"). <literal>P(i)</literal>
359
étant la probabilité qu'une éventualité soit de categorie i. <literal>P</literal> le vecteur des
360
probabilités est de taille <literal>m-1</literal> (la probabilté de la catégorie <literal>m</literal>
361
étant <literal>1-sum(P)</literal>). <literal>Y</literal> est alors de dimensions <literal>m x n</literal>,
362
chaque colonne <literal>Y(:,j)</literal> étant une réalisation de cette loi : <literal>Y(i,j)</literal>
363
est le nombre d'éventualités classées en catégorie <literal>i</literal> pour la <literal>j</literal> ème
364
réalisation (<literal>sum(Y(:,j)) = nb</literal>).
372
<literal>Y=grand(m,n,"poi",mu)</literal> génère des nombres aléatoires suivant la loi de Poisson
373
de moyenne <literal>mu</literal> (réel >= 0.0).
374
Fonction associée : <link linkend="cdfpoi">cdfpoi</link>.
379
<term>permutations aléatoires</term>
382
<literal>Y=grand(n,"prm",vect)</literal> génère <literal>n</literal> permutations aléatoire du
383
vecteur colonne (<literal>m x 1</literal>) <literal>vect</literal>.
388
<term>uniforme (def)</term>
391
<literal>Y=grand(m,n,"def")</literal> génère des nombres aléatoires suivant la loi uniforme
392
sur <literal>[0,1[</literal> (1 n'est jamais retourné).
397
<term>uniforme (unf)</term>
400
<literal>Y=grand(m,n,"unf",Low,High)</literal> génère des nombres aléatoires suivant la loi
401
uniforme sur <literal>[Low, High[</literal> (<literal>High</literal> is never return).
406
<term>uniforme (uin)</term>
409
<literal>Y=grand(m,n,"uin",Low,High)</literal> génère des entiers aléatoires suivant la loi uniforme
410
sur <literal>[Low, High]</literal>. <literal>High</literal>
411
et <literal>Low</literal> doivent être des entiers tels que <literal>
420
<term>uniforme (lgi)</term>
423
<literal>Y=grand(m,n,"lgi")</literal> retourne la sortie du générateur de base courant : des entiers
424
aléatoires suivant une loi uniforme sur :
429
<literal>[0, 2^32 - 1]</literal> for mt, kiss and fsultra;
434
<literal>[0, 2147483561]</literal> for clcg2;
439
<literal>[0, 2^31 - 2]</literal> for clcg4;
444
<literal>[0, 2^31 - 1]</literal> for urand.
453
<title>Actions sur le(s) générateur(s) de base</title>
455
Depuis Scilab-2.7 vous avez la possibilité de choisir parmi plusieurs générateurs de base
456
(donnant des entiers aléatoires suivant la loi "lgi") :
463
Le Mersenne-Twister de M. Matsumoto and T. Nishimura, période d'environ <literal>2^19937</literal>,
464
état interne donné par <literal>624</literal> entiers (plus un index); c'est le générateur
473
Le Keep It Simple Stupid de G. Marsaglia, période d'environ <literal>2^123</literal>,
474
état interne donné par <literal>4</literal> entiers.
482
Une combinaison de 2 générateurs linéaires congruentiels de P. L'Ecuyer,
483
période d'environ <literal>2^61</literal>, état interne donné par <literal>2</literal> entiers ;
484
c'était le seul générateur de base utilisé auparavent par grand (cette
485
version est cependant légèrement différente de l'ancienne).
493
Une combinaison de 4 générateurs linéaires congruentiels de P. L'Ecuyer,
494
période d'environ <literal>2^121</literal>, état interne donné par 4 entiers ; ce générateur
495
peut être partagé en <literal>101</literal> générateur virtuels (en fait la suite de
496
longueur <literal>2^121</literal> peut être découpée en <literal>101</literal> sous-suites) ce qui peut
497
être utile dans certains cas (voir 'Actions specifiques à clcg4' et
498
'Exemple d'utilisation de clcg4').
506
Un générateur SWB (subtract-with-borrow) mixé avec un générator congruentiel
507
concu par Arif Zaman et George Marsaglia. Sa période est supérieure à <literal>10^356</literal>,
508
et son état interne est constitué d'un tableau de 37 entiers, d'un index sur
509
ce tableau et d'un drapeau (0 ou 1) ainsi qu'un autre entier donnant l'état interne
510
du générateur congruentiel.
518
Le générateur de base utilisé par la fonction
519
<link linkend="rand">rand</link>, état interne constitué d'un entier, période de
520
<literal>2^31</literal>.
521
Ce generateur est fondé sur "Urand, A Universal Random Number Generator" By,
522
Michael A. Malcolm, Cleve B. Moler, Stan-Cs-73-334, January 1973, Computer
523
Science Department, School Of Humanities And Sciences, Stanford University.
524
C'est le plus rapide de cette liste, mais ses qualités statistiques
525
sont inférieures aux autres générateurs.
532
<title>Actions</title>
535
<term>action= "getgen"</term>
538
<literal>S=grand("getgen")</literal> retourne le nom du générateur de base actuel (<literal>S</literal> est
539
l'une des chaînes de caractères "mt", "kiss", "clcg2", "clcg4", "urand",
545
<term>action= "setgen"</term>
548
<literal>grand("setgen",gen)</literal> permet de changer le générateur de base : <literal>gen</literal>
549
doit être l'une des chaînes de caractères "mt", "kiss", "clcg2", "clcg4", "urand", "fsultra".
550
En cas de succès la fonction retourne cette même chaîne.
555
<term>action= "getsd"</term>
558
<literal>S=grand("getsd")</literal> retourne l'état interne actuel (les 'germes' dans l'ancienne
559
appelation quoique ce terme désigne plutôt l'état initial) du générateur de base courant ;
560
<literal>S</literal> est un vecteur colonne (d'entiers) de dimension <literal>625</literal>
561
pour mt (la première composante étant un 'index' sur l'état, c-a-d un entier de l'intervalle
562
<literal>[1,624]</literal>), <literal>4</literal>
563
pour kiss, <literal>2</literal> pour clcg2 , <literal>40</literal>pour fsultra, <literal>4</literal> pour clcg4
564
(pour ce dernier vous obtenez l'état interne du générateur virtuel courant), et <literal>1</literal>
570
<term>action= "setsd"</term>
573
<literal>grand("setsd",S), grand("setsd",s1[,s2,s3,s4])</literal> impose l'état interne du générateur de
581
<literal>S</literal> est un vecteur d'entiers de dimension <literal>625</literal> (la première composante
582
étant un index sur <literal>[1,624]</literal>), les <literal>624</literal> dernières composantes doivent
583
être dans <literal>[0,2^32[</literal>) (mais ne doivent pas être toutes nulles) ; une initialisation
584
plus simple est possible (et recommandée) en donnant un seul entier <literal>s1</literal> (<literal>s1</literal> appartenant
585
à <literal>[0,2^32[</literal>) ;
590
<term>pour kiss</term>
593
<literal>4</literal> entiers <literal>s1,s2, s3,s4</literal> dans <literal>[0,2^32[</literal> doivent être
599
<term>pour clcg2</term>
602
<literal>2</literal> entiers <literal>s1</literal> dans <literal>[1,2147483562]</literal> et <literal>s2</literal>
603
dans <literal>[1,2147483398]</literal> doivent être fournis ;
608
<term>pour clcg4</term>
611
<literal>4</literal> entiers <literal>s1</literal> dans <literal>[1,2147483646]</literal>, <literal>s2</literal>
612
dans <literal>[1,2147483542]</literal>, <literal>s3</literal> dans <literal>[1,2147483422]</literal>,
613
<literal>s4</literal> dans <literal>[1,2147483322]</literal> sont requis ;
614
<literal>ATTENTION</literal> : avec clcg4 vous positionnez l'état interne du générateur virtuel
615
courant mais vous perdez alors la synchronisation avec les autres générateurs virtuels.
616
(=> si vous utilisez clcg4 avec différents générateurs virtuels, il faut utiliser
617
l'option "setall" qui permet de changer l'état interne (du générateur numéro 0) tout en
618
recalculant l'état initial des 100 autres générateurs virtuels).
623
<term>pour urand</term>
626
<literal>1</literal> entier <literal>s1</literal> appartenant à
627
<literal>[0,2^31[</literal> est requis.
632
<term>for fsultra</term>
635
<literal>S</literal> est un vecteur de <literal>40</literal> entiers (son premier élément doit être dans
636
l'intervalle<literal>[0,37]</literal>, son deuxième (drapeau) doit être 0 ou 1, le troisième un
637
entier de <literal>[1,2^32[</literal> et les 37 composantes suivantes, des entiers de <literal>[0,2^32[</literal>) ; il est recommandé
638
d'utiliser l'autre procédure d'initialisation (plus simple) avec deux entiers <literal>s1</literal> et
639
<literal>s2</literal> de <literal>[0,2^32[</literal>.
647
<term>action= "phr2sd"</term>
650
<literal>Sd=grand("phr2sd", phrase)</literal> étant donnée une chaîne de caractères <literal>phrase</literal>
651
cet appel retourne un vecteur <literal>1 x 2</literal> qui peut être utilisé comme
652
état interne pour un générateur de base (initialement adapté pour clcg2).
659
<title>Options specifiques à clcg4</title>
661
Le générateur clcg4 peut être utilisé comme les autres mais il offre l'avantage de pouvoir être
662
découpé en (<literal>101</literal>) générateurs virtuels différents, c-a-d avec des séquences sans
663
intersection (quand vous utilisez un générateur classique vous pouvez changer l'état initial
664
de façon à obtenir une autre séquence mais vous n'êtes pas complètement sûr d'obtenir une
665
séquence complètement différente). Chaque générateur virtuel correspond à une séquence de
666
longueur <literal>2^72</literal> qui est de plus découpée en <literal>V=2^31</literal> segments de longueur
667
<literal>W=2^41</literal>. Pour un générateur virtuel donné vous pouvez retourner au début de la séquence
668
ou au début du segment ou bien au début du segment suivant.
669
Vous pouvez aussi changer l'état initial du générateur <literal>0</literal> avec l'option
670
"setall" qui recalcule l'état initial des autres générateurs virtuels de sorte à obtenir
671
la synchronisation entre les générateurs (c-a-d qu'en fonction du nouvel état initial du générateur
672
<literal>0</literal> l'état initial des générateurs <literal>1..100</literal> sont recalculés de façon à
673
obtenir <literal>101</literal> séquences qui ne s'intersectent pas).
677
<term>action= "setcgn"</term>
680
<literal>grand("setcgn",G)</literal> sélectionne le générateur virtuel numéro <literal>G</literal> :
681
lorsque le générateur de base courant est clcg4, c'est le générateur virtuel <literal>G</literal>
682
qui sera alors utilisé ; les <literal>101</literal> générateurs virtuels sont numérotés
683
<literal>0,1,...,100</literal> (ainsi <literal>G</literal> doit être un entier de l'intervalle
684
<literal>[0,100]</literal>) ; par défaut le générateur virtuel courant est celui de numéro
685
<literal>0</literal>.
690
<term>action= "getcgn"</term>
693
<literal>S=grand("getcgn")</literal> retourne le numéro du générateur
699
<term>action= "initgn"</term>
702
<literal>grand("initgn",I)</literal> réinitialise l'état du générateur virtuel courant :
708
<para>remet l'état à sa valeur initiale</para>
714
<para>remet l'état au début du segment courant</para>
721
positionne l'état au début du segment suivant et met à jour les valeurs définissant
722
le segment courant (vous ne pouvez pas revenir au début du segment précédent).
730
<term>action= "setall"</term>
733
<literal>grand("setall",s1,s2,s3,s4)</literal> impose l'état interne du générateur virtuel
734
de numéro <literal>0</literal> à <literal>s1,s2,s3,s4</literal>. L'état initial des autres générateurs est
735
alors reconstruit (de façon à obtenir 101 séquences qui ne s'intersectent pas). Voir
736
l'action "setsd" pour les contraintes sur <literal>s1, s2, s3, s4</literal>.
741
<term>action= "advnst"</term>
744
<literal>grand("advnst",K)</literal> avance l'état du générateur virtuel courant de <literal>2^K</literal>
745
valeurs et réinitialise l'état initial (du générateur virtuel courant) à
753
<title>Exemples</title>
755
Dans l'exemple suivant, nous produisons des nombres aléatoires
756
associés à différentes lois de distribution et dessinons les histogrammes
759
<programlisting role="example"><![CDATA[
760
760
// Renvoit une matrice de taille 400-par-800 de doubles aléatoires,
761
761
// avec une distribution normale de moyenne 0 et d'écart-type 1.
762
762
R = grand(400,800,"nor",0,1);
765
765
xtitle("Nombres aléatoires (loi normale) par grand","X","Fréquence");
767
<scilab:image localized="true">
768
R = grand(400,800,"nor",0,1);
770
xtitle("Nombres aléatoires (loi normale) par grand","X","Fréquence");
772
<programlisting role="example"><![CDATA[
766
773
// Renvoit une matrice de taille 400-par-800 de doubles aléatoires,
767
774
// uniformes dans [0,1).
768
775
R = grand(400,800,"def");
771
778
xtitle("Nombres aléatoires uniformes par grand","X","Fréquence");
780
<scilab:image localized="true">
781
R = grand(400,800,"def");
783
xtitle("Nombres aléatoires uniformes par grand","X","Fréquence");
785
<programlisting role="example"><![CDATA[
772
786
// Renvoit une matrice de taille 400-par-800 de doubles aléatoires,
773
787
// avec une distribution de Poisson de moyenne 5.
774
788
R = grand(400,800,"poi",5);