Zufallszahl

aus Wikipedia, der freien Enzyklopädie

Als Zufallszahl wird das Ergebnis von speziellen Zufallsexperimenten bezeichnet.

Zufallszahlen werden bei verschiedenen Methoden der Statistik benötigt, z. B. bei der Auswahl einer Stichprobe aus einer Grundgesamtheit, bei der zufälligen Verteilung von Versuchstieren auf verschiedene Versuchsgruppen (Randomisierung), bei der Monte-Carlo-Simulation u. a.

Zur Erzeugung von Zufallszahlen gibt es verschiedene Verfahren. Diese werden als Zufallszahlengeneratoren bezeichnet. Ein entscheidendes Kriterium für Zufallszahlen ist, ob das Ergebnis der Generierung als unabhängig von früheren Ergebnissen angesehen werden kann oder nicht.

Echte Zufallszahlen

Echte Zufallszahlen werden mithilfe physikalischer Phänomene erzeugt: Münzwurf, Würfel, Roulette, Rauschen elektronischer Bauelemente, radioaktive Zerfallsprozesse oder quantenphysikalische Effekte. Diese Verfahren nennen sich physikalische Zufallszahlengeneratoren, sind jedoch zeitlich oder technisch recht aufwendig.

Für andere Zwecke, z. B. bei der Erzeugung kryptographischer Schlüssel, werden hingegen echte Zufallszahlen benötigt.

Pseudozufallszahlen

In der realen Anwendung genügt häufig eine Folge von Pseudozufallszahlen, das sind scheinbar zufällige Zahlen, die nach einem festen, reproduzierbaren Verfahren erzeugt werden. Sie sind also nicht zufällig, da sie sich vorhersagen lassen, haben aber ähnliche statistische Eigenschaften (gleichmäßige Häufigkeitsverteilung, geringe Korrelation) wie echte Zufallszahlenfolgen. Solche Verfahren nennt man Pseudozufallszahlengeneratoren.

Die meisten höheren Programmiersprachen stellen Funktionen zum Erzeugen von Pseudozufallszahlen bereit. In der Programmiersprache C++ können Zufallszahlen mit der Funktion rand() der Standardbibliothek generiert und auf einfache Weise verwendet werden.[1][2]

Ein einfacher Zufallsgenerator kann auch neu programmiert werden. Das folgende Programm zeigt die Implementierung eines linearen Kongruenzgenerators mit , und . Es erzeugt 10 Zufallszahlen, die in einem Array gespeichert werden. Bei der Ausführung des Programms wird die Hauptfunktion main verwendet, die die Zufallszahlen auf der Konsole ausgibt.[3][4]

#include <iostream>
using namespace std;

// Funktion, die die Zufallszahlen erzeugt
int* linearCongruentialGenerator(int y0, int m, int a, int b, int count)
{
    int* randomNumbers = new int[count]; // Inititialisiert das Array für die Zufallszahlen
    randomNumbers[0] = y0; // Startwert für den Zufallszahlengenerator
    for (int i = 0; i < count; i++)
    {
        randomNumbers[i] = (a * randomNumbers[i - 1] + b) % m;
    }
    return randomNumbers;
}

// Hauptfunktion die das Programm ausführt
int main()
{
    int y0 = 0; // Deklaration der lokalen Variablen
    int m = 2147483648;
    int a = 214013;
    int b = 2531011;
    int count = 10;
    int* randomNumbers = linearCongruentialGenerator(y0, m, a, b, count); // Aufruf der Funktion
    for (int i = 0; i < count; i++)
    {
        cout << randomNumbers[i] << endl; // Ausgabe auf der Konsole
    }
}

Standardzufallszahlen

Standardzufallszahlen sollen als Realisationen unabhängiger, auf gleichverteilter Zufallsvariablen gelten können.

Ein Verfahren zur Erzeugung solcher Sequenzen heißt Standardzufallszahlengenerator. Solche Generatoren sollten schnell und die erzeugten Folgen auf unproblematische Weise leicht reproduzierbar sein. Meistens handelt es sich bei Standardzufallszahlengeneratoren um Kongruenzgeneratoren.

Zufallszahlen mit vorgegebener Verteilung

Die Inversionsmethode ermöglicht zumindest prinzipiell die Erzeugung von Zufallszahlen aus jeder univariaten Wahrscheinlichkeitsverteilung mit gegebener Verteilungsfunktion durch eine geeignete Transformation von Standardzufallszahlen. Dazu werden Standardzufallszahlen mit der verallgemeinerten inversen Verteilungsfunktion in die Zufallszahlen

transformiert. Die resultierenden Zufallszahlen können dann als Realisationen unabhängig und identisch verteilter Zufallsvariablen mit der Verteilungsfunktion gelten.

Es wurden verschiedene Ansätze zur Vereinfachung oder Beschleunigung der Zufallszahlenerzeugung für spezielle Verteilungen oder Verteilungsfamilien entwickelt, z. B. die Verwerfungsmethode, die Kompositionsmethode und verschiedene direkte Verfahren.[5]

Einzelnachweise

  1. cplusplus.com: rand
  2. cppreference.com: std::rand
  3. Rosetta Code: Linear congruential generator
  4. GeeksforGeeks: Linear Congruence method for generating Pseudo Random Numbers
  5. Horst Rinne: Taschenbuch der Statistik. 4. Auflage. Harri Deutsch, Frankfurt am Main 2008, ISBN 978-3-8171-1827-4, S. 208–213.

Siehe auch

Weblinks