Hauptinhalt

Erstellen von Arrays mit Zufallszahlen

R2026b

MATLAB® verwendet deterministische Algorithmen, um pseudozufällige Zahlen zu generieren. Diese Zahlen sind nicht tatsächlich zufällig und unabhängig im mathematischen Sinne, aber sie bestehen statistische Tests auf Zufälligkeit und Unabhängigkeit, und die Abfolge an Zufallszahlen kann zu Test- oder Diagnosezwecken reproduziert werden.

Die Funktionen rand, randi, randn und randperm sind die wichtigsten Funktionen zum Erstellen von Arrays mit Zufallszahlen. Die Funktion rng ermöglicht es Ihnen, den Seed (Startwert) und den Algorithmus zur Generierung von Zufallszahlen zu steuern.

Generieren von Zufallszahlen

Mithilfe der Funktionen rand, randi, randn und randperm können Sie Zufallszahlen generieren, die unterschiedlichen Verteilungen folgen. Die Funktion rand generiert zufällige Gleitkommazahlen zwischen 0 und 1, die aus einer Gleichverteilung gezogen werden. Erstellen Sie z. B. einen 10.000×1-Spaltenvektor mit reellen Gleitkommazahlen, die aus einer Gleichverteilung gezogen wurden.

rng("default")
n = 10000;
r1 = rand(n,1);
Alle Werte in r1 liegen im offenen Intervall (0, 1). Erstellen Sie ein Histogramm dieser Werte. Das Histogramm ist ungefähr flach, was darauf hinweist, dass die Stichprobe der Werte eine einheitliche Verteilung aufweist.
histogram(r1)
xlabel("Value")
ylabel("Counts")
title("Histogram of rand(" + n + ",1)")

Die Funktion randi generiert zufällige ganzzahlige double-Werte, die aus einer diskreten Gleichverteilung gezogen wurden. Erstellen Sie z. B. einen 10.000×1-Spaltenvektor mit ganzzahligen Werten im geschlossenen Intervall [1,10], die aus einer diskreten Gleichverteilung gezogen wurden.

n = 10000;
r2 = randi(10,n,1);
Erstellen Sie ein Histogramm dieser Werte. Das Histogramm ist ungefähr flach, was darauf hinweist, dass die Stichprobe der Werte zwischen 1 und 10 eine einheitliche Verteilung aufweist.
histogram(r2)
xlabel("Value")
ylabel("Counts")
title("Histogram of randi(10," + n + ",1)")

Die Funktion randn generiert zufällige reelle Gleitkommazahlen, die aus einer Standardnormalverteilung gezogen wurden. Erstellen Sie z. B. einen 20.000×1-Spaltenvektor mit Zahlen, die aus einer Standardnormalverteilung gezogen wurden.

n = 20000;
r3 = randn(n,1);
Erstellen Sie ein Histogramm dieser Werte. Das Histogramm weist eine gaußsche Form auf, was darauf hindeutet, dass die Stichprobe der Werte eine Standard-Normalverteilung aufweist, mit einem Mittelwert von 0 und einer Standardabweichung von 1.
histogram(r3)
xlabel("Value")
ylabel("Counts")
title("Histogram of randn(" + n + ",1)")

Die Funktion randperm generiert ein double-Array aus zufälligen Ganzzahlen ohne wiederholte Werte. Erstellen Sie zum Beispiel ein 1×10-Array mit ganzen Zahlen, die zufällig aus dem Intervall [1,15] ausgewählt werden.

r4 = randperm(15,10);
Im Gegensatz zu randi, das ein Array mit wiederholten Werten zurückgeben kann, gibt randperm ein Array ohne wiederholte Werte zurück. Erstellen Sie ein Histogramm dieser Werte. Jede Ganzzahl erscheint im Histogramm höchstens einmal.
histogram(r4)
xticks(1:15)
xlim([0 16])
yticks([0 1])
xlabel("Value")
ylabel("Counts")
title("Histogram of randperm(15,10)")

Aufeinanderfolgende Aufrufe einer dieser Funktionen liefern unterschiedliche Ergebnisse. Dieses Verhalten ist nützlich, um unterschiedliche Arrays mit Zufallswerten zu erstellen.

Angeben von Zufallszahlen-Seed und Generator

Sie können mit der Funktion rng den Seed und den Generator-Algorithmus angeben, der von rand, randi, randn und randperm verwendet werden soll. Der Seed legt den Ausgangszustand eines Zufallszahlengenerators fest und ermöglicht es Ihnen, eine Abfolge von Zufallszahlen zu reproduzieren. Der Generatoralgorithmus legt den Algorithmus fest, mit dem die Abfolge an Zufallszahlen erzeugt wird.

Die in MATLAB verfügbaren Generatoralgorithmen sind in dieser Tabelle angegeben.

NameBeschreibung
"twister" (Standard)Mersenne Twister
"combRecursive"Combined Multiple Recursive Generator
"multFibonacci"Multiplicative Lagged Fibonacci Generator

"pcg" (seit R2026b)

64-Bit Permuted Congruential Generator With Double Xor-Shift Multiply
"philox"Philox 4x32 generator with 10 rounds
"simdTwister"SIMD-Oriented Fast Mersenne Twister
"threefry"Threefry 4x64 generator with 20 rounds

"xoshiro" (seit R2026b)

Xor-Shift-Rotate Generator With 256-Bit State And Double Addition

Legen Sie mit der Funktion rng den von den Funktionen rand, randi, randn und randperm verwendeten Seed und Generator fest.

So setzt rng(0,"twister") z. B. den Seed auf 0 und den Generator-Algorithmus auf Mersenne Twister. Informationen darüber, wie die Wiederholung von Zufallszahlen-Arrays bei einem Neustart von MATLAB vermieden wird, finden Sie unter Why Do Random Numbers Repeat After Startup?.

Weitere Informationen zur Steuerung des Zustands des Zufallszahlengenerators, um Berechnungen mit denselben Zufallszahlen zu wiederholen oder um zu gewährleisten, dass bei wiederholten Berechnungen unterschiedliche Zufallszahlen verwendet werden, finden Sie unter Control Random Number Generation.

Sie können den Standard-Seed und den Algorithmus eines Zufallszahlengenerators über das MATLAB Einstellungsfenster (seit R2023b) ändern. Wenn Sie diese Einstellungen nicht ändern, verwendet rng den Standardwert "twister" für den Mersenne-Twister-Generator mit Seed 0. Weitere Informationen finden Sie unter Default Settings for Random Number Generator und Reproducibility for Random Number Generator.

Angeben von Zufallszahlen-Datentypen

Die Funktionen rand und randn erzeugen standardmäßig Werte mit doppelter Genauigkeit (double).

rng("default")
A = rand(1,5)
A = 1×5
    0.8147    0.9058    0.1270    0.9134    0.6324

Zudem können Sie explizit den Datentyp der Zufallszahlen angeben. Beispielsweise können Sie double als Datentyp angeben.

rng("default")
B = rand(1,5,"double")
B = 1×5
    0.8147    0.9058    0.1270    0.9134    0.6324
tf = isequal(A,B)
ans =
  logical
   1

rand und randn können auch Werte mit einfacher Genauigkeit erzeugen.

rng("default")
A_single = rand(1,5,"single")
A_single = 1×5 single row vector
    0.8147    0.9058    0.1270    0.9134    0.6324

Die Werte entsprechen jenen Werten, die Sie durch Typumwandlung (cast) der Werte mit doppelter Genauigkeit aus dem vorherigen Beispiel zu einfacher Genauigkeit erhalten würden. Der Zufallsstrom, aus dem die rand-Funktion schöpft, schreitet unabhängig von der Klasse der zurückgegebenen Werte fort.

B_single = cast(B,"single");
isequal(A_single,B_single)
ans =
  logical
   1

Die randi-Funktion unterstützt einfache und doppelte Genauigkeit und alle Ganzzahlentypen außer int64 und uint64.

A = randi([1 10],1,5,"double")
A = 1×5
    1    3    6    10    10
B_uint8 = randi([1 10],1,5,"uint8")
B_uint8 = 1×5 uint8 row vector
    2    10    10    5    9

Siehe auch

| | | |

Themen