Erstellen von Arrays mit Zufallszahlen
MATLAB® verwendet Algorithmen, um pseudozufällige und pseudounabhängige Zahlen zu erzeugen. Diese Zahlen sind nicht streng zufällig und unabhängig im mathematischen Sinne, aber sie bestehen verschiedene statistische Tests auf Zufälligkeit und Unabhängigkeit, und ihre Berechnung kann zu Test- oder Diagnosezwecken wiederholt werden.
Die Funktionen rand, randi, randn und randperm sind die wichtigsten Funktionen zum Erstellen von Arrays mit Zufallszahlen. Die Funktion rng ermöglicht es, den Seed (Startwert) und den Algorithmus zur Erzeugung von Zufallszahlen zu steuern.
Zufallszahlenfunktionen
Es gibt vier grundlegende Zufallszahlenfunktionen: rand, randi, randn und randperm. Die Funktion rand gibt Gleitkommazahlen zwischen 0 und 1 zurück, die aus einer Gleichverteilung gezogen werden. Erstellen Sie z. B. einen 1000×1-Spaltenvektor mit reellen Gleitkommazahlen, die aus einer Gleichverteilung gezogen wurden.
rng("default")
r1 = rand(1000,1);r1 liegen im offenen Intervall (0, 1). Ein Histogramm dieser Werte ist annähernd flach, was auf eine ziemlich gleichmäßige Auswahl von Zahlen hinweist.Die Funktion randi gibt double (doppelt-genaue) ganzzahlige Werte zurück, die aus einer diskreten Gleichverteilung gezogen wurden. Erstellen Sie z. B. einen 1000×1-Spaltenvektor mit ganzzahligen Werten, die aus einer diskreten Gleichverteilung gezogen wurden.
r2 = randi(10,1000,1);
r2 liegen im geschlossenen Intervall [1, 10]. Ein Histogramm dieser Werte ist ungefähr flach, was auf eine ziemlich gleichmäßige Auswahl von ganzen Zahlen zwischen 1 und 10 hinweist. Die Funktion randn gibt Arrays mit reellen Gleitkommazahlen zurück, die aus einer Standardnormalverteilung gezogen wurden. Erstellen Sie z. B. einen 1000×1-Spaltenvektor mit Zahlen, die aus einer Standardnormalverteilung gezogen wurden.
r3 = randn(1000,1);
r3 sieht aus wie eine annähernde Normalverteilung mit einem Mittelwert von 0 und einer Standardabweichung von 1.Mit der Funktion randperm können Sie ein double (Doppel-) Array von zufälligen ganzzahligen Werten erstellen, das keine wiederholten Werte enthält. Erstellen Sie zum Beispiel ein 1×5-Array mit ganzen Zahlen, die zufällig aus dem Bereich [1, 15] ausgewählt werden.
r4 = randperm(15,5);
randi, das ein Array mit wiederholten Werten zurückgeben kann, enthält das von randperm zurückgegebene Array keine wiederholten Werte.Aufeinanderfolgende Aufrufe einer dieser Funktionen liefern unterschiedliche Ergebnisse. Dieses Verhalten ist nützlich, um mehrere unterschiedliche Arrays mit Zufallswerten zu erstellen.
Zufallszahlengeneratoren
MATLAB bietet mehrere Optionen für den Generatoralgorithmus. Sie sind in der Tabelle zusammengefasst.
| Wert | Name des Generators | Schlüsselwort für den Generator |
|---|---|---|
"twister" | Mersenne Twister | mt19937ar |
"simdTwister" | SIMD-Oriented Fast Mersenne Twister | dsfmt19937 |
"combRecursive" | Combined Multiple Recursive | mrg32k3a |
"multFibonacci" | Multiplicative Lagged Fibonacci | mlfg6331_64 |
"philox" | Philox 4x32 generator with 10 rounds | philox4x32_10 |
"threefry" | Threefry 4x64 generator with 20 rounds | threefry4x64_20 |
"v4" | Legacy MATLAB version 4.0 generator | mcg16807 |
"v5uniform" | Legacy MATLAB version 5.0 uniform generator | swb2712 |
"v5normal" | Legacy MATLAB version 5.0 normal generator | shr3cong |
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 Controlling Random Number Generation.
Sie können den Standardalgorithmus und den Seed in den MATLAB-Einstellungen festlegen (seit R2023b). Wenn Sie diese Einstellungen nicht ändern, verwendet rng den Standardwert "twister" für den Generator Mersenne Twister mit Seed 0, wie in früheren Versionen. Weitere Informationen finden Sie unter Default Settings for Random Number Generator und Reproducibility for Random Number Generator.
Zufallszahlen-Datentypen
Die Funktionen rand und randn erzeugen standardmäßig Werte mit doppelter Genauigkeit (double).
rng("default")
A = rand(1,5);
class(A)ans = 'double'
Explizites Festlegen der Klasse als „double“:
rng("default") B = rand(1,5,"double"); class(B)
ans = 'double'
isequal(A,B)
ans = 1
rand und randn können auch Werte mit einfacher Genauigkeit erzeugen.
rng("default") A = rand(1,5,"single"); class(A)
ans = 'single'
Die Werte entsprechen jenen Werten, die Sie durch Typumwandlung (cast) der Werte mit doppelter Genauigkeit aus dem vorherigen Beispiel erhalten würden. Der Zufallsstrom, aus dem die Funktionen schöpfen, entwickelt sich unabhängig von der Klasse der zurückgegebenen Werte weiter.
A,B
A =
0.8147 0.9058 0.1270 0.9134 0.6324
B =
0.8147 0.9058 0.1270 0.9134 0.6324randi unterstützt sowohl ganzzahlige Typen als auch einfache oder doppelte Genauigkeit.
A = randi([1 10],1,5,"double");
class(A)ans = 'double'
B = randi([1 10],1,5,"uint8");
class(B)ans = 'uint8'
Siehe auch
rng | rand | randi | randn | randperm