Polar-Methode
# 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. Das erspart 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:

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

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

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

## Implementierung

### C++

Die Polar-Methode erzeugt Werte aus der Standardnormalverteilung mit Erwartungswert 0 und Standardabweichung 1. Die folgende Implementierung in der Programmiersprache C++ generiert 10 standardnormalverteilte Zufallszahlen aus jeder Normalverteilung mit Erwartungswert μ und Varianz σ und gibt sie auf der Konsole aus.

