Contenu principal

randn

Nombres aléatoires normalement distribués

Description

X = randn renvoie un scalaire aléatoire tiré de la distribution normale standard.

X = randn(n) renvoie une matrice de nombres aléatoires normalement distribués de dimension n x n.

exemple

X = randn(sz1,...,szN) renvoie un tableau de nombres aléatoires de dimension sz1 x ... x szNsz1,...,szN indiquent la taille de chaque dimension. Par exemple, randn(3,4) renvoie une matrice 3 x 4.

exemple

X = randn(sz) renvoie un tableau de nombres aléatoires où le vecteur de taille sz définit size(X). Par exemple, randn([3 4]) renvoie une matrice 3 x 4.

exemple

X = randn(___,typename) renvoie un tableau de nombres aléatoires dont le type de données est typename. L’entrée typename peut être soit "single" soit "double". Vous pouvez utiliser n’importe quel argument en entrée dans les syntaxes précédentes.

exemple

X = randn(___,like=p) renvoie un tableau de nombres aléatoires tels que p, c’est-à-dire du même type de données et de la même complexité (réelle ou complexe) que p. Vous pouvez spécifier typename ou like, mais pas les deux.

exemple

X = randn(s,___) génère des nombres à partir d’une série de nombres aléatoires s au lieu de la série globale par défaut. Pour créer une série, utilisez RandStream. Vous pouvez spécifier s suivi de n’importe quelle combinaison d’arguments en entrée dans les syntaxes précédentes.

Exemples

réduire tout

Générez une matrice 5 x 5 de nombres aléatoires normalement distribués.

r = randn(5)
r = 5×5

    0.5377   -1.3077   -1.3499   -0.2050    0.6715
    1.8339   -0.4336    3.0349   -0.1241   -1.2075
   -2.2588    0.3426    0.7254    1.4897    0.7172
    0.8622    3.5784   -0.0631    1.4090    1.6302
    0.3188    2.7694    0.7147    1.4172    0.4889

Générez des valeurs à partir d’une distribution normale bivariée avec un vecteur de moyennes et une matrice de covariance spécifiés.

mu = [1 2];
sigma = [1 0.5; 0.5 2];
R = chol(sigma);
z = repmat(mu,10,1) + randn(10,2)*R
z = 10×2

    1.5377    0.4831
    2.8339    6.9318
   -1.2588    1.8302
    1.8622    2.3477
    1.3188    3.1049
   -0.3077    1.0750
    0.5664    1.6190
    1.3426    4.1420
    4.5784    5.6532
    3.7694    5.2595

Sauvegardez l’état actuel du générateur de nombres aléatoires et créez un vecteur de nombres aléatoires de dimension 1 x 5.

s = rng;
r = randn(1,5)
r = 1×5

    0.5377    1.8339   -2.2588    0.8622    0.3188

Restaurez l’état du générateur de nombres aléatoires sur s, puis créez un nouveau vecteur de nombres aléatoires de dimension 1 x 5. Les valeurs sont les mêmes qu’avant.

rng(s);
r1 = randn(1,5)
r1 = 1×5

    0.5377    1.8339   -2.2588    0.8622    0.3188

Créez un tableau de nombres aléatoires de dimension 3 x 2 x 3.

X = randn([3,2,3])
X = 
X(:,:,1) =

    0.5377    0.8622
    1.8339    0.3188
   -2.2588   -1.3077


X(:,:,2) =

   -0.4336    2.7694
    0.3426   -1.3499
    3.5784    3.0349


X(:,:,3) =

    0.7254   -0.2050
   -0.0631   -0.1241
    0.7147    1.4897

Créez un vecteur de nombres aléatoires de dimension 1 x 4 dont les éléments sont de simple précision.

r = randn(1,4,"single")
r = 1×4 single row vector

    0.5377    1.8339   -2.2588    0.8622

class(r)
ans = 
'single'

Créez une matrice de nombres aléatoires normalement distribués de la même taille qu’un tableau existant.

A = [3 2; -2 1];
sz = size(A);
X = randn(sz)
X = 2×2

    0.5377   -2.2588
    1.8339    0.8622

Il est courant de combiner les deux lignes de code précédentes en une seule.

X = randn(size(A));

Créez une matrice 2 x 2 avec des nombres aléatoires simple précision.

p = single([3 2; -2 1]);

Créez un tableau de nombres aléatoires de la même taille et du même type de données que p.

X = randn(size(p),like=p)
X = 2×2 single matrix

    0.5377   -2.2588
    1.8339    0.8622

class(X)
ans = 
'single'

Depuis R2022a

Générez 10 nombres complexes aléatoires à partir de la distribution normale complexe standard.

a = randn(10,1,like=1i)
a = 10×1 complex

   0.3802 + 1.2968i
  -1.5972 + 0.6096i
   0.2254 - 0.9247i
  -0.3066 + 0.2423i
   2.5303 + 1.9583i
  -0.9545 + 2.1460i
   0.5129 - 0.0446i
   0.5054 - 0.1449i
  -0.0878 + 1.0534i
   0.9963 + 1.0021i

Depuis R2022a

Par défaut, randn(__,like=1i) génère des nombres aléatoires à partir de la distribution normale complexe standard. Les parties réelles et imaginaires sont des variables aléatoires indépendantes normalement distribuées de moyenne 0 et de variance 1/2. La matrice de covariance d’une variable aléatoire 2D z=[Re(z),Im(z)] est [1/2 0; 0 1/2]. Pour illustrer ce comportement par défaut, générez 50 000 nombres aléatoires avec randn et calculez leur covariance.

n = 50000;
z = randn(n,1,like=1i);
cov_z = cov(real(z),imag(z),1)
cov_z = 2×2

    0.4980    0.0007
    0.0007    0.4957

Pour générer des nombres aléatoires à partir d’une distribution normale complexe plus générale avec une moyenne et une covariance spécifiques, transformez les données générées à partir de la distribution par défaut. Pour une variable aléatoire à N dimensions z=[z1,z2,,zN] qui suit une distribution normale ayant une moyenne nulle et une matrice de covariance unitaire, vous pouvez transformer z en y=μ+zR. La variable y suit la distribution normale avec la moyenne μ et la matrice de covariance σ=RTR qui est symétrique définie positive. Par exemple, spécifiez la moyenne μ=1+2i et la matrice de covariance σ=[σxxσxyσyxσyy]=[2-2-24].

mu = 1 + 2i;
sigma = [2 -2; -2 4];

Calculez la décomposition de Cholesky de la matrice de covariance. Le résultat est une matrice triangulaire supérieure R telle que sigma = R'*R. Mettez les données d’origine à l’échelle en appliquant également un facteur de sqrt(2), car la variance des parties réelles et imaginaires de la distribution d’origine est 1/2. Décalez ensuite les données mises à l’échelle vers la moyenne spécifiée.

R = chol(sigma);
z_scaled = sqrt(2)*[real(z) imag(z)]*R*[1; 1i];
y = mu + z_scaled;

Affichez les 10 premiers nombres complexes générés.

y(1:10)
ans = 10×1 complex

   1.7604 + 3.8331i
  -2.1945 + 6.4138i
   1.4508 - 0.3002i
   0.3868 + 3.0977i
   6.0606 + 0.8560i
  -0.9090 + 8.2011i
   2.0259 + 0.8850i
   2.0108 + 0.6993i
   0.8244 + 4.2823i
   2.9927 + 2.0115i

Arguments d'entrée

réduire tout

Taille de la matrice carrée, spécifiée sous forme d’une valeur entière.

  • Si n est égal à 0, alors X est une matrice vide.

  • Si n est négatif, il est traité comme 0.

Types de données : single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Taille de chaque dimension, spécifiée sous forme d’arguments distincts de valeurs entières.

  • Si la taille d’une dimension est égale à 0, alors X est un tableau vide.

  • Si la taille d’une dimension est négative, elle est traitée comme une taille égale à 0.

  • Au-delà de la deuxième dimension, randn ignore les dimensions suivantes de taille 1. Par exemple, randn(3,1,1,1) produit un vecteur de nombres aléatoires de dimension 3 x 1.

Types de données : single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Taille de chaque dimension, spécifiée sous forme d’un vecteur ligne de valeurs entières. Chaque élément de ce vecteur indique la taille de la dimension correspondante :

  • Si la taille d’une dimension est égale à 0, alors X est un tableau vide.

  • Si la taille d’une dimension est négative, elle est traitée comme une taille égale à 0.

  • Au-delà de la deuxième dimension, randn ignore les dimensions suivantes de taille 1. Par exemple, randn([3 1 1 1]) produit un vecteur de nombres aléatoires de dimension 3 x 1.

Exemple : sz = [2 3 4] crée un tableau de dimension 2 x 3 x 4.

Types de données : single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Type de données (classe) à créer, spécifié comme "double", "single" ou le nom d’une autre classe supportant randn.

Exemple : randn(5,"single")

Prototype du tableau à créer, spécifié sous forme de tableau numérique.

Exemple : randn(5,like=p)

Types de données : single | double
Support des nombres complexes : Oui

Série de nombres aléatoires, spécifiée sous forme d’un objet RandStream.

Exemple : s = RandStream("dsfmt19937"); randn(s,[3 1])

Arguments de sortie

réduire tout

Tableau en sortie, renvoyé sous forme de scalaire, de vecteur, de matrice ou de tableau multidimensionnel.

En savoir plus

réduire tout

Conseils

  • La séquence de nombres produite par randn est déterminée par les paramètres internes du générateur de nombres pseudo-aléatoires uniforme qui sous-tend rand, randi et randn. Vous pouvez contrôler ce générateur de nombres aléatoires partagé à l’aide de rng.

Capacités étendues

développer tout

Historique des versions

Introduit avant R2006a

développer tout