Polar-Methode - LinkFang.de





Polar-Methode


Die Polar-Methode von George Marsaglia und Thomas A. Bray ist ein Verfahren zur Erzeugung normalverteilter Zufallszahlen (Zufallszahlengenerator).

Geschichte

Diese Methode geht zurück auf den Box-Muller Algorithmus zur Erzeugung normalverteilter Zufallsgrößen. Bei diesem werden die euklidischen Koordinaten verwertet. Bei der Polar-Methode werden diese euklidischen Koordinaten in Polarkoordinaten umgewandelt. Dadurch spart man sich die Auswertung von trigonometrischen Funktionen.

Beschreibung

Man geht von zufälligen Punkten in der Ebene aus, die im Einheitskreis gleichverteilt sind. Aus deren Koordinaten werden jeweils zwei standardnormalverteilte Zufallszahlen erzeugt:

  1. Erzeuge zwei voneinander unabhängige, gleichverteilte Zufallszahlen [math]u[/math], [math]v[/math] im Intervall [math][-1, 1][/math]
  2. Berechne [math]q=u^2+v^2[/math]. Falls [math]q = 0[/math] oder [math]q \geq 1[/math], gehe zurück zu Schritt 1.
  3. Berechne [math]p = \sqrt {\frac{-2 \cdot \ln q}{q}}[/math].
  4. [math]x_1=u \cdot p[/math] und [math]x_2=v \cdot p[/math] sind nun zwei voneinander unabhängige, standardnormalverteilte Zufallszahlen.

Der Punkt [math](u, v)[/math] muss im Einheitskreis liegen ([math]q \lt 1[/math]), und es muss [math]q \gt 0[/math] gelten, da in den reellen Zahlen der Logarithmus von Null und die Division durch Null nicht definiert sind. Anderenfalls müssen zwei neue Zahlen [math]u[/math] und [math]v[/math] erzeugt werden.

Durch lineare Transformation lassen sich hieraus beliebige normalverteilte Zufallszahlen erzeugen: Die generierten Werte [math]x_i[/math] sind [math]\mathcal{N}(0,1)[/math]-verteilt, somit liefert [math]a \cdot x + b[/math] Werte, die [math]\mathcal{N}(b,a^2)[/math]-verteilt sind.

Implementierung

Pseudocode

Prozedur ErzeugeNormalverteilteZufallszahlen (Referenzparameter x1, x2)
  Wiederhole
    u = 2 * Zufallszahl - 1  // "Zufallszahl" liefert in [0,1)
    v = 2 * Zufallszahl - 1  //   gleichverteilte Werte
    q = u * u + v * v
  Solange bis (0 < q) und (q < 1)
  p = Wurzel (-2 * ln(q) / q)
  x1 = u * p
  x2 = v * p  // Rückgabe durch die Referenzparameter x1, x2
Ende

C

double random(); // liefert im Intervall [0,1) gleichverteilte Zufallszahlen
 
void polar(double *x1, double *x2)
{
   double u, v, q, p;
 
   do {
      u = 2.0 * random() - 1;
      v = 2.0 * random() - 1;
      q  = u * u + v * v;
   } while (q <= 0.0 || q >= 1.0);
 
   p = sqrt(-2 * log(q) / q);
   *x1 = u * p;
   *x2 = v * p;
}

Siehe auch

Literatur


Kategorien: Pseudozufallszahlengenerator

Quelle: Wikipedia - http://de.wikipedia.org/wiki/Polar-Methode (Vollständige Liste der Autoren des Textes [Versionsgeschichte])    Lizenz: CC-by-sa-3.0

Änderungen: Alle Bilder mit den meisten Bildunterschriften wurden entfernt. Ebenso alle zu nicht-existierenden Artikeln/Kategorien gehenden internen Wikipedia-Links (Bsp. Portal-Links, Redlinks, Bearbeiten-Links). Entfernung von Navigationsframes, Geo & Normdaten, Mediadateien, gesprochene Versionen, z.T. ID&Class-Namen, Style von Div-Containern, Metadaten, Vorlagen, wie lesenwerte Artikel. Ansonsten sind keine Inhaltsänderungen vorgenommen worden. Weiterhin kann es durch die maschinelle Bearbeitung des Inhalts zu Fehlern gerade in der Darstellung kommen. Darum würden wir jeden Besucher unserer Seite darum bitten uns diese Fehler über den Support mittels einer Nachricht mit Link zu melden. Vielen Dank!

Stand der Informationen: August 201& - Wichtiger Hinweis: Da die Inhalte maschinell von Wikipedia übernommen wurden, ist eine manuelle Überprüfung nicht möglich. Somit garantiert LinkFang.de nicht die Richtigkeit und Aktualität der übernommenen Inhalte. Sollten die Informationen mittlerweile fehlerhaft sein, bitten wir Sie darum uns per Support oder E-Mail zu kontaktieren. Wir werden uns dann innerhalb von spätestens 10 Tagen um Ihr Anliegen kümmern. Auch ohne Anliegen erfolgt mindestens alle drei Monate ein Update der gesamten Inhalte.