Contenuto principale

randn

Numeri casuali distribuiti normalmente

Descrizione

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

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.

esempio

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 = 1×4 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 = 2×2 single matrix

    0.5377   -2.2588
    1.8339    0.8622

class(X)
ans = 
'single'

Da R2022a

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

Da R2022a

Per impostazione predefinita, randn(__,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 di una variabile casuale bidimensionale z=[Re(z),Im(z)] è [1/2 0; 0 1/2]. Per mostrare questo comportamento predefinito, generare 50.000 numeri casuali utilizzando randn e calcolare la loro covarianza.

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

Per generare numeri casuali da una distribuzione normale complessa più generale con media e covarianza specifiche, trasformare i dati generati dalla distribuzione predefinita. Per una variabile casuale N-dimensionale z=[z1,z2,,zN] che segue una distribuzione normale con media zero e matrice di covarianza unitaria, è possibile trasformare z in y=μ+zR. La variabile y segue la distribuzione normale con media μ e la matrice di covarianza σ=RTR che è simmetrica e definita positiva. 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];

Eseguire la decomposizione di Cholesky della matrice di covarianza. Il risultato è una matrice triangolare superiore R tale che sigma = R'*R. Scalare i dati originali applicando anche un fattore di sqrt(2) perché la varianza delle parti reali e immaginarie nella distribuzione originale è 1/2. Quindi, spostare i dati scalati verso la media specificata.

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

Visualizzare i primi 10 numeri complessi generati.

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

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])

Argomenti di output

comprimi tutto

Array di output, restituito come scalare, vettore, matrice o array multidimensionale.

Ulteriori informazioni

comprimi tutto

Suggerimenti

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

Funzionalità estese

espandi tutto

Cronologia versioni

Introduzione prima di R2006a

espandi tutto