Main Content

La traduzione di questa pagina non è aggiornata. Fai clic qui per vedere l'ultima versione in inglese.

randn

Numeri casuali distribuiti normalmente

Descrizione

X = randn restituisce uno scalare casuale estratto dalla distribuzione normale standard.

esempio

X = randn(n) restituisce una matrice n x n di numeri casuali distribuiti normalmente.

esempio

X = randn(sz1,...,szN) restituisce un array sz1 x...x szN di numeri casuali dove sz1,...,szN indica la grandezza di ciascuna dimensione. Ad esempio, randn(3,4) restituisce una matrice 3x4.

esempio

X = randn(sz) restituisce un array di numeri casuali dove il vettore di dimensione sz definisce size(X). Ad esempio, randn([3 4]) restituisce una matrice 3x4.

esempio

X = randn(___,typename) restituisce un array di numeri casuali del tipo di dati typename. L’input typename può essere "single" o "double". È possibile utilizzare uno qualsiasi degli argomenti di input nelle sintassi precedenti.

esempio

X = randn(___,"like",p) restituisce un array di numeri casuali come p; ossia, dello stesso tipo di dati e della stessa complessità (reale o complessa) di p. È possibile specificare typename o "like", ma non entrambi.

X = randn(s,___) genera numeri dal flusso di numeri casuali s anziché dal flusso globale predefinito. Per creare un flusso, utilizzare RandStream. È possibile specificare s seguito da una qualsiasi combinazione di argomenti di input nelle sintassi precedenti.

Esempi

comprimi tutto

Generare una matrice 5x5 di numeri casuali distribuiti normalmente.

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

Generare valori da una distribuzione bivariata normale con un vettore medio e una matrice di covarianza specificati.

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

Salvare lo stato attuale del generatore di numeri casuali e creare un vettore 1x5 di numeri casuali.

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

    0.5377    1.8339   -2.2588    0.8622    0.3188

Ripristinare lo stato del generatore di numeri casuali su s, quindi creare un nuovo vettore 1x5 di numeri casuali. I valori sono uguali a quelli precedenti.

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

    0.5377    1.8339   -2.2588    0.8622    0.3188

Creare un array 3x2x3 di numeri casuali.

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

Creare un vettore 1x4 di numeri casuali i cui elementi sono a precisione singola.

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

    0.5377    1.8339   -2.2588    0.8622

class(r)
ans = 
'single'

Crea una matrice di numeri casuali distribuiti normalmente con la stessa grandezza di un array esistente.

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

    0.5377   -2.2588
    1.8339    0.8622

È prassi comune combinare le due righe di codice precedenti in un'unica riga.

X = randn(size(A));

Creare una matrice 2x2 di numeri casuali a precisione singola.

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

Creare un array di numeri casuali della stessa dimensione e dello stesso tipo di dati di p.

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

    0.5377   -2.2588
    1.8339    0.8622

class(X)
ans = 
'single'

Generare 10 numeri complessi casuali dalla distribuzione normale complessa 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

Per impostazione predefinita, randn(n,"like",1i) genera numeri casuali dalla distribuzione normale complessa standard. Le parti reali e immaginarie sono variabili casuali indipendenti distribuite normalmente con media 0 e varianza 1/2. La matrice di covarianza ha la forma [1/2 0; 0 1/2].

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

    0.4980    0.0007
    0.0007    0.4957

Per specificare una distribuzione normale complessa più generale, definire la media e la matrice di covarianza. Ad esempio, specificare la media come μ=1+2i e la matrice di covarianza come σ=[σxxσxyσyxσyy]=[2-2-24].

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

Trasformare i dati generati in precedenza per seguire la distribuzione normale complessa appena definita. Includere il fattore sqrt(2) quando si scalano i dati, poiché la varianza delle parti reali e immaginarie nella distribuzione originale è pari a 1/2.

R = chol(sigma);
z_comp = [real(z) imag(z)];
z = repmat(mu,50000,1) + z_comp*sqrt(2)*R*[1; 1i];
z(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

Argomenti di input

comprimi tutto

Dimensione della matrice quadrata, specificata come valore intero.

  • Se n è 0, X è una matrice vuota.

  • Se n è negativo, viene trattato come 0.

Tipi di dati: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Grandezza di ciascuna dimensione, specificata come argomenti separati di valori interi.

  • Se la grandezza di qualsiasi dimensione è 0, X è un array vuoto.

  • Se la grandezza di qualsiasi dimensione è negativa, viene trattata come 0.

  • Oltre la seconda dimensione, randn ignora le dimensioni finali con grandezza pari a 1. Ad esempio, randn(3,1,1,1) produce un vettore 3x1 di numeri casuali.

Tipi di dati: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Grandezza di ciascuna dimensione, specificata come vettore riga di valori interi. Ciascun elemento di questo vettore indica la grandezza della dimensione corrispondente:

  • Se la grandezza di qualsiasi dimensione è 0, X è un array vuoto.

  • Se la grandezza di qualsiasi dimensione è negativa, viene trattata come 0.

  • Oltre la seconda dimensione, randn ignora le dimensioni finali con grandezza pari a 1. Ad esempio, randn([3 1 1 1]) produce un vettore 3x1 di numeri casuali.

Esempio sz = [2 3 4] crea un array 2x3x4.

Tipi di dati: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Tipo di dati (classe) da creare, specificato come "double", "single" o il nome di un’altra classe che fornisce supporto randn.

Esempio randn(5,"single")

Prototipo di array da creare, specificato come un array numerico.

Esempio randn(5,"like",p)

Tipi di dati: single | double
Supporto numeri complessi:

Flusso di numeri casuali, specificato come oggetto RandStream.

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

Ulteriori informazioni

comprimi tutto

Distribuzioni normali standard reali e standard complesse

Quando si generano numeri reali casuali, la funzione randn genera dati che seguono la distribuzione normale standard:

f(x)=12πex2/2.

In questo caso, x è una variabile casuale reale con media 0 e varianza 1.

Quando si generano numeri complessi casuali, come quando si utilizza il comando randn(...,"like",1i), la funzione randn genera dati che seguono la distribuzione normale complessa standard:

f(z)=1πe|z|2.

In questo caso, z è una variabile casuale complessa le cui parti reali e immaginarie sono variabili casuali indipendenti distribuite normalmente con media 0 e varianza 1/2.

Suggerimenti

  • La sequenza di numeri prodotta da randn è determinata dalle impostazioni interne del generatore di numeri pseudocasuali uniformi che è alla base di rand, randi e randn. È possibile controllare quel generatore di numeri casuali condiviso utilizzando rng.

Funzionalità estese

Cronologia versioni

Introduzione prima di R2006a

espandi tutto