Spektraltest
aus Wikipedia, der freien Enzyklopädie
Der Spektraltest ist eine theoretische Methode, mit der Zufallszahlen auf ihre Unabhängigkeit überprüft werden können. Dabei werden jeweils i gewonnene Zufallszahlen zu i-tupeln zusammengefasst und überprüft wie gut sich diese Vektoren in ihrem Wertebereich des i-dimensionalen Raumes verteilen und wie gut diese Verteilung der theoretisch geforderten entspricht.
Bei Zufallszahlengeneratoren, die nur endlich viele verschiedene Zahlen liefern (periodische Generatoren) kann die Rechnung über die gesamte Periode durchgeführt werden.
Bei speziellen Generatoren (LKG) gibt es sogar Algorithmen, die das exakte Ergebnis mit relativ geringem Rechenaufwand liefern.
(Dieser Artikel entstand aufgrund einer Diskussion der Zwölferregel. Siehe dort)
[Bearbeiten] Details
Zufallszahlen müssen irgendwie gewonnen werden. Wenn man keinen physikalischen Mechanismus (Radioaktivität, echter Würfel) an den Rechner anschließt, geschieht das in der Regel mit Pseudozufallszahlengeneratoren.
Stand der Technik sind dabei die sog. LKG (Linearer Kongruenzgenerator) mit der Formel und festen Konstanten a, c, m).
Die Unabhängigkeit der generierten Zufallszahlen wird mit dem erwähnten Spektraltest getestet. (Ungetestete Generatoren sollten sowieso nie verwendet werden.)
Der Spektraltest liefert als Ergebnis, wieviele aufeinanderfolgene Zahlen noch als unabhängig gelten können und wie gut sie unabhängig sind. Das geschieht mit , die für jeweils 2, 3, 4, 5, ... aufeinanderfolgende Zufallszahlen deren Qualität angeben.
Der Kehrwert 1 / νi ist dabei der kleinste Abstand der (i-1)-dimensionalen Hypergitterebenen im i-dimensionalen Raum von aufeinanderfolgenden i-tupeln der generierten Zahlen.
Je größer νi, also je kleiner 1 / νi ist, umso besser verteilen sich die Vektoren in ihrem Wertebereich, umso dichter lieger sie und umso mehr Dezimalstellen dürfen verwendet werden.
[Bearbeiten] Beispiele
Generator mit . Der Spektraltest liefert
. Der Generator wurde hier als Beispiel ausgewählt, weil er ein für viele gute Generatoren typisches Ergebnis liefert.
Die Zahlen sagen direkt etwas über die Genauigkeit der erhaltenen Zufallszahlen aus: Wenn man in einer Rechnung immer zwei Zufallszahlen benötigt, etwa weil man Zufallspunkte in der Ebene benötigt, kann man die Ergebnisse maximal mit einer Genauigkeit von 1 / ν2 = 1 / 67654 = 0.0000148 < 10 − 4 = 4 Dezimalstellen angeben. Wenn man drei pro Rechnung benötigt sind das 1 / ν3 = 1 / 1017 = 0.000938 < 10 − 3 = 3 Dezimalstellen. Bei vier pro Rechnung ergibt sich 1 / ν4 = 1 / 249 = 0.00402 < 10 − 2 = 2 Dezimalstellen.
Die Box-Muller-Methode zur Generierung von normalverteilten Zufallszahlen benötigt pro Auswertung zwei Zufallszahlen. Ihre Ergebnisse sind also mit diesem Zufallsgenerator besser als vierstellig. Der im Beispiel verwendete Generator ist übrigens ein brauchbarer. Es gibt zwar bessere, aber leider noch mehr sehr viel schlechtere, wie das nächste Beispiel zeigt.
Das Horrorbeispiel der Statistiker ist der leider oft verwendete Generator randu mit und dem Spektraltestergebnis
. Alle i-tupel mit i > 2 haben maximal 1 Dezimalstelle Genauigkeit!
[Bearbeiten] Literatur
Donald E. Knuth: The Art of Computer Programming; 3rd edition; Vol. 2 Seminumerical Algorithms; ISBN 0-201-89684-2; p. 93 ff