Start · Sprachen · PHP · Referenz · stats_rand_gen_normal

stats_rand_gen_normal

Funktion

Erzeugt eine zufällige Gleitkommazahl aus einer Normalverteilung mit gegebenem Mittelwert und Standardabweichung.

Kategorie: math

Signatur

stats_rand_gen_normal(float $av, float $sd): float

Beschreibung

stats_rand_gen_normal() gibt eine Zufallszahl zurück, die aus einer Normalverteilung (Gaußschen Verteilung) mit dem angegebenen Mittelwert (av) und der Standardabweichung (sd) stammt. Diese Funktion ist Teil der PECL-Erweiterung stats.

Die Normalverteilung ist eine der wichtigsten Wahrscheinlichkeitsverteilungen in Statistik und Naturwissenschaften. Sie eignet sich überall dort, wo Messwerte um einen zentralen Wert streuen – beispielsweise bei Simulation von Messunsicherheiten, Generierung synthetischer Testdaten, Monte-Carlo-Simulationen oder beim Testen statistischer Algorithmen.

Der Parameter av legt den Erwartungswert (Mittelpunkt der Glockenkurve) fest, während sd die Breite der Verteilung steuert: Ein größeres sd erzeugt stärker streuende Werte. Der Algorithmus basiert typischerweise auf dem Box-Muller- oder Kinderman-Ramage-Verfahren.

Zu beachten ist, dass diese Funktion die PECL-Erweiterung stats voraussetzt, die nicht standardmäßig mit PHP ausgeliefert wird und separat installiert werden muss.

Parameter

Name Typ Default Beschreibung
$av Pflicht float Der Mittelwert (Erwartungswert) der Normalverteilung. Gibt den Mittelpunkt der Glockenkurve an, um den die erzeugten Zufallszahlen streuen.
$sd Pflicht float Die Standardabweichung der Normalverteilung. Bestimmt die Breite der Streuung: Ein größerer Wert erzeugt weiter vom Mittelwert entfernte Zufallszahlen. Muss größer als 0 sein.

Rückgabewert

Typ
float
Beschreibung
Gibt eine zufällige Gleitkommazahl zurück, die der Normalverteilung mit dem angegebenen Mittelwert und der angegebenen Standardabweichung folgt.

Beispiele

Einfache normalverteilte Zufallszahl erzeugen

<?php
// Normalverteilung mit Mittelwert 0 und Standardabweichung 1 (Standardnormalverteilung)
$zahl = stats_rand_gen_normal(0.0, 1.0);
echo "Zufallszahl (mu=0, sigma=1): " . $zahl . PHP_EOL;

// Normalverteilung mit Mittelwert 100 und Standardabweichung 15 (z. B. IQ-Skala)
$iq_simuliert = stats_rand_gen_normal(100.0, 15.0);
echo "Simulierter IQ-Wert: " . round($iq_simuliert, 2) . PHP_EOL;
Zufallszahl (mu=0, sigma=1): 0.32847... Simulierter IQ-Wert: 112.43

Monte-Carlo-Simulation: Streuung von Messwerten

<?php
// Simulation von 10 Temperaturmessungen mit Messungenauigkeit
// Wahrer Wert: 20.0 Grad, Messungenauigkeit: ±0.5 Grad (Standardabweichung)
$wahrer_wert = 20.0;
$messungenauigkeit = 0.5;
$anzahl = 10;

$messwerte = [];
for ($i = 0; $i < $anzahl; $i++) {
    $messwerte[] = stats_rand_gen_normal($wahrer_wert, $messungenauigkeit);
}

$mittelwert = array_sum($messwerte) / count($messwerte);

echo "Simulierte Messwerte:\n";
foreach ($messwerte as $i => $wert) {
    printf("  Messung %2d: %.4f °C\n", $i + 1, $wert);
}
printf("Mittelwert der Messungen: %.4f °C\n", $mittelwert);
Simulierte Messwerte: Messung 1: 20.3214 °C Messung 2: 19.8754 °C ... Mittelwert der Messungen: 19.9981 °C

// Wichtig · Fallstricke

Voraussetzung: Die Funktion steht nur zur Verfügung, wenn die PECL-Erweiterung stats installiert und aktiviert ist (pecl install stats). Sie gehört nicht zum PHP-Kern.

Standardabweichung: Der Parameter sd sollte stets positiv sein. Ein Wert von 0 oder negativ führt zu undefiniertem Verhalten oder fehlerhaften Ergebnissen, da eine Normalverteilung mit Standardabweichung ≤ 0 mathematisch nicht sinnvoll ist.

Reproduzierbarkeit: Da es sich um einen Pseudozufallsgenerator handelt, liefert die Funktion bei jedem Aufruf unterschiedliche Werte. Für reproduzierbare Ergebnisse (z. B. in Tests) kann stats_rand_setall() zur Setzung des Seeds genutzt werden, sofern verfügbar.

Alternative ohne PECL: In modernem PHP lässt sich eine normalverteilte Zufallszahl auch über die Box-Muller-Transformation mit lcg_value() oder mt_rand() selbst implementieren.