Berechnung einer kumulativen Verteilungsfunktion (CDF) in C

CCBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab lernen Sie, wie man die kumulative Verteilungsfunktion (CDF) in C berechnet. Das Lab umfasst zwei Hauptphasen: das Lesen der Verteilungsparameter und des x-Wertes und anschließend die Berechnung der CDF, indem die Wahrscheinlichkeiten von minus Unendlich bis zum gegebenen x-Wert unter Verwendung der Standardnormalverteilung summiert werden. Das Lab bietet die vollständige Codeimplementierung und führt Sie Schritt für Schritt durch den Prozess, um Ihnen ein fundiertes Verständnis der CDF-Berechnung in C zu vermitteln.

Verteilungsparameter und x-Wert einlesen

In diesem Schritt lernen Sie, wie Sie die Verteilungsparameter und den x-Wert zum Berechnen der kumulativen Verteilungsfunktion (CDF) in C einlesen.

Erstellen Sie zunächst eine neue C-Datei zur Implementierung der CDF-Berechnung:

cd ~/project
nano cdf_calculator.c

Fügen Sie nun den folgenden Code zum Einlesen der Verteilungsparameter hinzu:

#include <stdio.h>
#include <stdlib.h>

int main() {
    // Verteilungsparameter
    double mean, std_dev;
    double x_value;

    // Benutzer nach Verteilungsparametern fragen
    printf("Geben Sie den Mittelwert (μ) ein: ");
    scanf("%lf", &mean);

    printf("Geben Sie die Standardabweichung (σ) ein: ");
    scanf("%lf", &std_dev);

    // Benutzer nach x-Wert fragen
    printf("Geben Sie den x-Wert zum Berechnen der CDF ein: ");
    scanf("%lf", &x_value);

    // Eingelesene Parameter zur Überprüfung ausgeben
    printf("\nEingelesene Parameter:\n");
    printf("Mittelwert (μ): %.2f\n", mean);
    printf("Standardabweichung (σ): %.2f\n", std_dev);
    printf("X-Wert: %.2f\n", x_value);

    return 0;
}

Kompilieren und ausführen:

gcc cdf_calculator.c -o cdf_calculator
./cdf_calculator

Beispielausgabe:

Geben Sie den Mittelwert (μ) ein: 5.0
Geben Sie die Standardabweichung (σ) ein: 2.0
Geben Sie den x-Wert zum Berechnen der CDF ein: 3.5

Eingelesene Parameter:
Mittelwert (μ): 5.00
Standardabweichung (σ): 2.00
X-Wert: 3.50

Wahrscheinlichkeiten von -∞ bis x summieren

In diesem Schritt lernen Sie, wie Sie die kumulative Verteilungsfunktion (CDF) berechnen, indem Sie die Wahrscheinlichkeiten von minus Unendlich bis zu einem gegebenen x-Wert unter Verwendung der Standardnormalverteilung summieren.

Ändern wir das vorherige C-Programm, um die CDF-Berechnung zu implementieren:

cd ~/project
nano cdf_calculator.c

Ersetzen Sie den vorherigen Code durch die folgende Implementierung:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

// Näherungsfunktion für die Standardnormal-CDF (Abramowitz und Stegun)
double standard_normal_cdf(double x) {
    const double a1 =  0.254829592;
    const double a2 = -0.284496736;
    const double a3 =  1.421413741;
    const double a4 = -1.453152027;
    const double a5 =  1.061405429;
    const double p  =  0.3275911;

    // Negative Werte behandeln
    int sign = (x < 0) ? -1 : 1;
    x = fabs(x);

    // Näherungsformel
    double t = 1.0 / (1.0 + p * x);
    double y = 1.0 - (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * exp(-x * x);

    return 0.5 * (1.0 + sign * y);
}

// CDF für die Normalverteilung berechnen
double normal_cdf(double x, double mean, double std_dev) {
    // Z-Score Berechnung
    double z_score = (x - mean) / std_dev;
    return standard_normal_cdf(z_score);
}

int main() {
    // Verteilungsparameter
    double mean, std_dev;
    double x_value;

    // Benutzer nach Verteilungsparametern fragen
    printf("Geben Sie den Mittelwert (μ) ein: ");
    scanf("%lf", &mean);

    printf("Geben Sie die Standardabweichung (σ) ein: ");
    scanf("%lf", &std_dev);

    // Benutzer nach x-Wert fragen
    printf("Geben Sie den x-Wert zum Berechnen der CDF ein: ");
    scanf("%lf", &x_value);

    // CDF berechnen und ausgeben
    double cdf_value = normal_cdf(x_value, mean, std_dev);

    printf("\nErgebnisse der CDF-Berechnung:\n");
    printf("Mittelwert (μ): %.2f\n", mean);
    printf("Standardabweichung (σ): %.2f\n", std_dev);
    printf("X-Wert: %.2f\n", x_value);
    printf("CDF P(X ≤ x): %.4f\n", cdf_value);

    return 0;
}

Kompilieren Sie das Programm mit der Mathematikbibliothek:

gcc cdf_calculator.c -o cdf_calculator -lm

Führen Sie das Programm aus und testen Sie es mit Beispielwerten:

./cdf_calculator

Beispielausgabe:

Geben Sie den Mittelwert (μ) ein: 5.0
Geben Sie die Standardabweichung (σ) ein: 2.0
Geben Sie den x-Wert zum Berechnen der CDF ein: 3.5

Ergebnisse der CDF-Berechnung:
Mittelwert (μ): 5.00
Standardabweichung (σ): 2.00
X-Wert: 3.50
CDF P(X ≤ x): 0.2525

Ausgabe des CDF-Wertes

In diesem Schritt lernen Sie, wie Sie das CDF-Berechnungsprogramm verbessern, indem Sie detailliertere Ausgaben und Interpretationen der Ergebnisse der kumulativen Verteilungsfunktion (CDF) hinzufügen.

Ändern wir das vorherige C-Programm, um die Ausgabe zu verbessern und einige interpretative Kommentare hinzuzufügen:

cd ~/project
nano cdf_calculator.c

Aktualisieren Sie die Funktion main(), um detailliertere Ausgaben einzuschließen:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

// Die vorherigen Funktionen standard_normal_cdf und normal_cdf bleiben gleich

int main() {
    // Verteilungsparameter
    double mean, std_dev;
    double x_value;

    // Benutzer nach Verteilungsparametern fragen
    printf("Kumulative Verteilungsfunktion (CDF) Rechner\n");
    printf("-----------------------------------------------\n");
    printf("Geben Sie den Mittelwert (μ) ein: ");
    scanf("%lf", &mean);

    printf("Geben Sie die Standardabweichung (σ) ein: ");
    scanf("%lf", &std_dev);

    // Benutzer nach x-Wert fragen
    printf("Geben Sie den x-Wert zum Berechnen der CDF ein: ");
    scanf("%lf", &x_value);

    // CDF berechnen und ausgeben
    double cdf_value = normal_cdf(x_value, mean, std_dev);

    // Detaillierte Ausgabe mit Interpretation
    printf("\n--- Ergebnisse der CDF-Berechnung ---\n");
    printf("Mittelwert (μ):             %.2f\n", mean);
    printf("Standardabweichung (σ): %.2f\n", std_dev);
    printf("X-Wert:              %.2f\n", x_value);
    printf("CDF P(X ≤ x):         %.4f (%.2f%%)\n",
           cdf_value, cdf_value * 100);

    // Interpretation des CDF-Wertes
    printf("\nInterpretation:\n");
    if (cdf_value < 0.5) {
        printf("Der Wert liegt unterhalb der Mittelverteilung.\n");
    } else if (cdf_value > 0.5) {
        printf("Der Wert liegt oberhalb der Mittelverteilung.\n");
    } else {
        printf("Der Wert liegt im Mittel der Verteilung.\n");
    }

    // Erklärung der Wahrscheinlichkeit
    printf("Wahrscheinlichkeit, einen Wert kleiner oder gleich %.2f zu beobachten: %.2f%%\n",
           x_value, cdf_value * 100);

    return 0;
}

Kompilieren Sie das Programm:

gcc cdf_calculator.c -o cdf_calculator -lm

Führen Sie das Programm mit Beispielwerten aus:

./cdf_calculator

Beispielausgabe:

Kumulative Verteilungsfunktion (CDF) Rechner
-----------------------------------------------
Geben Sie den Mittelwert (μ) ein: 5.0
Geben Sie die Standardabweichung (σ) ein: 2.0
Geben Sie den x-Wert zum Berechnen der CDF ein: 3.5

--- Ergebnisse der CDF-Berechnung ---
Mittelwert (μ):             5.00
Standardabweichung (σ): 2.00
X-Wert:              3.50
CDF P(X ≤ x):         0.2525 (25.25%)

Interpretation:
Der Wert liegt unterhalb der Mittelverteilung.
Wahrscheinlichkeit, einen Wert kleiner oder gleich 3.50 zu beobachten: 25.25%

Zusammenfassung

In diesem Labor haben Sie gelernt, wie man Verteilungsparameter (Mittelwert und Standardabweichung) und einen x-Wert liest, um die kumulative Verteilungsfunktion (CDF) in C zu berechnen. Sie haben dann die CDF-Berechnung implementiert, indem Sie Wahrscheinlichkeiten von minus Unendlich bis zum gegebenen x-Wert unter Verwendung der Näherungsfunktion für die Standardnormalverteilung summiert haben. Schließlich haben Sie den CDF-Wert für die angegebenen Eingabeparameter ausgegeben.

Die wichtigsten Lernpunkte dieses Labors sind die Schritte zur Berechnung der CDF, einschließlich des Lesens der erforderlichen Eingabedaten und der Anwendung der Näherungsformel für die Standardnormal-CDF, um den gewünschten CDF-Wert zu berechnen.