Hauptinhalt

randn

Normal verteilte Zufallszahlen

Beschreibung

X = randn gibt einen zufälligen Skalar zurück, der aus der Standardnormalverteilung entnommen wurde.

X = randn(n) gibt eine n-x-n-Matrix aus normalverteilten Zufallszahlen zurück.

Beispiel

X = randn(sz1,...,szN) gibt ein sz1x...xszN-Array aus Zufallszahlen zurück, wobei sz1,...,szN die Größe der jeweiligen Dimension angibt. randn(3,4) gibt beispielsweise eine 3x4-Matrix zurück.

Beispiel

X = randn(sz) gibt ein Array aus Zufallszahlen zurück, bei dem der Größenvektor sz size(X) definiert. randn([3 4]) gibt beispielsweise eine 3x4-Matrix zurück.

Beispiel

X = randn(___,typename) gibt ein Array aus Zufallszahlen mit dem Datentyp typename zurück. Die Eingabe typename kann "single" oder "double" sein. Sie können ein beliebiges der Eingabeargumente aus den vorherigen Syntaxen verwenden.

Beispiel

X = randn(___,like=p) gibt ein Array aus Zufallszahlen wie p zurück, also mit demselben Datentyp und derselben Komplexität (reell oder komplex) wie p. Sie können entweder typename oder like festlegen, nicht jedoch beides.

Beispiel

X = randn(s,___) generiert Zahlen aus einem Zufallszahlen-Stream s statt dem globalen Standard-Stream. Verwenden Sie RandStream, um einen Stream zu erstellen. Sie können s angeben, gefolgt von beliebigen Eingabeargument-Kombinationen aus den vorherigen Syntaxen.

Beispiele

alle reduzieren

Generieren Sie eine 5x5-Matrix aus normalverteilten Zufallszahlen.

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

Erzeugen Sie Werte aus einer bivariaten Normalverteilung, für die der Mittelwertvektor und die Kovarianzmatrix angegeben sind.

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

Speichern Sie den aktuellen Zustand des Zufallszahlengenerators und erstellen Sie einen 1x5-Vektor aus Zufallszahlen.

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

    0.5377    1.8339   -2.2588    0.8622    0.3188

Setzen Sie den Zustand des Zufallszahlengenerators auf s zurück und erstellen Sie einen neuen 1x5-Vektor aus Zufallszahlen. Die Werte sind identisch zu den vorherigen Werten.

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

    0.5377    1.8339   -2.2588    0.8622    0.3188

Erstellen Sie ein 3x2x3-Array aus Zufallszahlen.

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

Erstellen Sie einen 1x4-Vektor aus Zufallszahlen, deren Elemente einfache Genauigkeit aufweisen.

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

    0.5377    1.8339   -2.2588    0.8622

class(r)
ans = 
'single'

Erstellen Sie eine Matrix aus normalverteilten Zufallszahlen mit derselben Größe wie ein bestehendes Array.

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

    0.5377   -2.2588
    1.8339    0.8622

Es ist ein gängiges Muster, die beiden vorherigen Codezeilen zu einer einzigen Zeile zu kombinieren.

X = randn(size(A));

Erstellen Sie eine 2x2-Matrix aus Zufallszahlen mit einfacher Genauigkeit.

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

Erstellen Sie ein Array aus Zufallszahlen mit derselben Größe und demselben Datentyp wie p.

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

    0.5377   -2.2588
    1.8339    0.8622

class(X)
ans = 
'single'

Seit R2022a

Generieren Sie 10 komplexe Zufallszahlen aus der komplexen Standardnormalverteilung.

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

Seit R2022a

Standardmäßig generiert randn(__,like=1i) Zufallszahlen aus der komplexen Standardnormalverteilung. Die Real- und Imaginärteile sind unabhängige normalverteilte Zufallsvariablen mit Mittelwert 0 und Varianz 1/2. Die Kovarianzmatrix für die 2D-Zufallsvariable z=[Re(z),Im(z)] ist [1/2 0; 0 1/2]. Um dieses Standardverhalten zu zeigen, erzeugen Sie mithilfe von randn 50.000 Zufallszahlen und berechnen Sie deren Kovarianz.

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

Um Zufallszahlen aus einer allgemeineren komplexen Normalverteilung mit spezifischem Mittelwert und spezifischer Kovarianz zu erzeugen, transformieren Sie die aus der Standardverteilung erzeugten Daten. Bei einer N-dimensionalen Zufallsvariable z=[z1,z2,,zN], die einer Normalverteilung mit Mittelwert null und Einheits-Kovarianzmatrix folgt, können Sie z in y=μ+zR transformieren. Die Variable y folgt der Normalverteilung mit Mittelwert μ und Kovarianzmatrix σ=RTR, die symmetrisch positiv definit ist. Geben Sie zum Beispiel den Mittelwert als μ=1+2i und die Kovarianzmatrix als σ=[σxxσxyσyxσyy]=[2-2-24] an.

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

Führen Sie die Cholesky-Zerlegung der Kovarianzmatrix durch. Das Ergebnis ist eine obere Dreiecksmatrix R, für die gilt: sigma = R'*R. Skalieren Sie die Originaldaten, indem Sie zudem einen Faktor von sqrt(2) anwenden, da die Varianz der Real- und Imaginärteile in der Originalverteilung 1/2 beträgt. Verschieben Sie dann die skalierten Daten auf den angegebenen Mittelwert.

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

Zeigen Sie die ersten 10 generierten komplexen Zahlen an.

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

Eingabeargumente

alle reduzieren

Größe der quadratischen Matrix, angegeben als ganzzahliger Wert.

  • Wenn n 0 ist, dann ist X eine leere Matrix.

  • Wenn n negativ ist, wird der Wert wie 0 behandelt.

Datentypen: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Größe der jeweiligen Dimension, angegeben als separate Argumente ganzzahliger Werte.

  • Wenn die Größe einer beliebigen Dimension 0 ist, dann ist X ein leeres Array.

  • Wenn die Größe einer beliebigen Dimension negativ ist, wird der Wert wie 0 behandelt.

  • Jenseits der zweiten Dimension ignoriert randn nachgeordnete Dimensionen mit einer Größe von 1. Beispielsweise generiert randn(3,1,1,1) einen 3x1-Vektor aus Zufallszahlen.

Datentypen: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Größe der jeweiligen Dimension, angegeben als Zeilenvektor ganzzahliger Werte. Jedes Element dieses Vektors gibt die Größe der entsprechenden Dimension an:

  • Wenn die Größe einer beliebigen Dimension 0 ist, dann ist X ein leeres Array.

  • Wenn die Größe einer beliebigen Dimension negativ ist, wird der Wert wie 0 behandelt.

  • Jenseits der zweiten Dimension ignoriert randn nachgeordnete Dimensionen mit einer Größe von 1. Beispielsweise generiert randn([3 1 1 1]) einen 3x1-Vektor aus Zufallszahlen.

Beispiel: sz = [2 3 4] erstellt ein 2x3x4-Array.

Datentypen: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Zu erstellender Datentyp (Klasse), angegeben als "double", "single" oder als Name einer anderen Klasse, die Unterstützung für randn bereitstellt.

Beispiel: randn(5,"single")

Prototyp eines zu erstellenden Arrays, angegeben als numerisches Array.

Beispiel: randn(5,like=p)

Datentypen: single | double
Unterstützung komplexer Zahlen: Ja

Zufallszahlen-Stream, angegeben als RandStream-Objekt.

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

Ausgabeargumente

alle reduzieren

Ausgabearray, zurückgegeben als Skalar, Vektor, Matrix oder mehrdimensionales Array.

Mehr über

alle reduzieren

Tipps

  • Die von randn erzeugte Zahlensequenz wird durch die internen Einstellungen des einheitlichen Pseudozufallszahlengenerators festgelegt, der die Grundlage von rand, randi und randn bildet. Sie können diesen gemeinsamen Zufallszahlengenerator mithilfe von rng steuern.

Erweiterte Fähigkeiten

alle erweitern

Versionsverlauf

Eingeführt vor R2006a

alle erweitern