Créer des tableaux de nombres aléatoires
MATLAB® utilise des algorithmes pour générer des nombres pseudo-aléatoires et pseudo-indépendants. Ces nombres ne sont pas strictement aléatoires et indépendants au sens mathématique du terme, mais ils réussissent divers tests statistiques de stochasticité et d’indépendance, et il est possible de répéter leur calcul à des fins de test ou de diagnostic.
rand, randi, randn et randperm sont les principales fonctions permettant de créer des tableaux de nombres aléatoires. La fonction rng permet de contrôler la valeur initiale et l’algorithme qui génère les nombres aléatoires.
Fonctions de nombres aléatoires
Il existe quatre fonctions de nombres aléatoires fondamentales : rand, randi, randn et randperm. La fonction rand renvoie des nombres à virgule flottante compris entre 0 et 1 et tirés d’une distribution uniforme. Par exemple, créez un vecteur colonne de dimension 1 000 x 1 contenant des nombres réels à virgule flottante tirés d’une distribution uniforme.
rng("default")
r1 = rand(1000,1);r1 sont comprises dans l’intervalle ouvert (0,1). L’histogramme de ces valeurs est à peu près plat, ce qui indique un échantillonnage de nombres assez uniforme.La fonction randi renvoie des valeurs entières de type double tirées d’une distribution uniforme discrète. Par exemple, créez un vecteur colonne de dimension 1 000 x 1 contenant des valeurs entières tirées d’une distribution uniforme discrète.
r2 = randi(10,1000,1);
r2 sont comprises dans l’intervalle fermé [1, 10]. L’histogramme de ces valeurs est à peu près plat, ce qui indique un échantillonnage assez uniforme de nombres entiers compris entre 1 et 10. La fonction randn renvoie des tableaux de nombres réels à virgule flottante tirés d’une distribution normale standard. Par exemple, créez un vecteur colonne de dimension 1 000 x 1 contenant des nombres tirés d’une distribution normale standard.
r3 = randn(1000,1);
r3 ressemble à une distribution à peu près normale de moyenne 0 et d’écart-type 1.Vous pouvez utiliser la fonction randperm pour créer un tableau de type double contenant des valeurs entières aléatoires ne se répétant pas. Par exemple, créez un tableau de dimension 1 x 5 contenant des nombres entiers sélectionnés de manière aléatoire dans la plage [1, 15].
r4 = randperm(15,5);
randi qui peut renvoyer un tableau de valeurs qui se répètent, le tableau renvoyé par randperm ne contient aucune valeur répétée.Les appels successifs à l’une de ces fonctions renvoient des résultats différents. Ce comportement est utile pour créer différents tableaux de valeurs aléatoires.
Générateurs de nombres aléatoires
MATLAB propose plusieurs options d’algorithme de générateur qui sont résumées dans le tableau suivant.
| Valeur | Nom du générateur | Mot-clé du générateur |
|---|---|---|
"twister" | Mersenne Twister | mt19937ar |
"simdTwister" | Mersenne Twister rapide orienté SIMD | dsfmt19937 |
"combRecursive" | Récursif multiple combiné | mrg32k3a |
"multFibonacci" | Fibonacci décalé multiplicatif | mlfg6331_64 |
"philox" | Philox 4 x 32 à 10 tours | philox4x32_10 |
"threefry" | Threefry 4 x 64 à 20 tours | threefry4x64_20 |
"v4" | Ancien générateur de MATLAB version 4.0 | mcg16807 |
"v5uniform" | Ancien générateur uniforme de MATLAB version 5.0 | swb2712 |
"v5normal" | Ancien générateur normal de MATLAB version 5.0 | shr3cong |
Utilisez la fonction rng pour définir la valeur initiale et le générateur utilisés par les fonctions rand, randi, randn et randperm.
Par exemple, rng(0,"twister") définit la valeur initiale à 0 et l’algorithme du générateur sur Mersenne Twister. Pour éviter la répétition des mêmes tableaux de nombres aléatoires au redémarrage de MATLAB, consultez Why Do Random Numbers Repeat After Startup?
Pour plus d’informations sur le contrôle de l’état du générateur afin de répéter les calculs en utilisant les mêmes nombres aléatoires ou au contraire en garantissant l’utilisation de nombres aléatoires différents, consultez Controlling Random Number Generation.
Vous pouvez définir l’algorithme et la valeur initiale par défaut dans les paramètres de MATLAB (depuis R2023b). Si vous ne modifiez pas ces paramètres, rng utilise la valeur d’usine "twister" correspondant au générateur Mersenne Twister avec la valeur initiale 0 comme dans les versions précédentes. Pour plus d’informations, consultez Default Settings for Random Number Generator et Reproducibility for Random Number Generator.
Types de données des nombres aléatoires
Par défaut, les fonctions rand et randn génèrent des valeurs double précision.
rng("default")
A = rand(1,5);
class(A)ans = 'double'
Pour spécifier explicitement la classe double :
rng("default") B = rand(1,5,"double"); class(B)
ans = 'double'
isequal(A,B)
ans = 1
rand et randn peuvent également générer des valeurs simple précision.
rng("default") A = rand(1,5,"single"); class(A)
ans = 'single'
Il s’agit des mêmes valeurs que si vous aviez converti le type des valeurs double précision de l’exemple précédent. Le flux aléatoire à partir duquel les fonctions tirent des valeurs avance de la même façon quelle que soit la classe de valeurs renvoyée.
A,B
A =
0.8147 0.9058 0.1270 0.9134 0.6324
B =
0.8147 0.9058 0.1270 0.9134 0.6324randi supporte à la fois les types entiers et simple ou double précision.
A = randi([1 10],1,5,"double");
class(A)ans = 'double'
B = randi([1 10],1,5,"uint8");
class(B)ans = 'uint8'
Voir aussi
rng | rand | randi | randn | randperm