Approximation de la PDF de la distribution normale en C

CCBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, nous apprendrons à approximer la fonction de densité de probabilité (PDF) de la distribution normale en C. Nous lirons d'abord les valeurs d'entrée pour le point (x), la moyenne (μ) et l'écart type (σ), puis calculerons la PDF en utilisant la formule standard. Enfin, nous afficherons la valeur de la PDF calculée.

Ce laboratoire couvre le processus étape par étape de la mise en œuvre de cette fonctionnalité en C, y compris la lecture des entrées utilisateur, le calcul de la PDF et l'affichage du résultat. Ce laboratoire vise à fournir une compréhension pratique du travail avec les concepts de probabilité et de combinatoire dans la programmation C.

Lecture de x, moyenne μ, écart type σ

Dans cette étape, nous apprendrons à lire les valeurs d'entrée pour le calcul de la fonction de densité de probabilité (PDF) de la distribution normale en C. Nous créerons un programme qui prend trois paramètres clés : x (le point), μ (la moyenne) et σ (l'écart type).

Tout d'abord, créons un nouveau fichier C pour notre implémentation :

cd ~/project
nano normal_pdf.c

Maintenant, écrivons le code initial pour lire les valeurs d'entrée :

#include <stdio.h>

int main() {
    double x, mean, std_dev;

    printf("Entrez le point x : ");
    scanf("%lf", &x);

    printf("Entrez la moyenne (μ) : ");
    scanf("%lf", &mean);

    printf("Entrez l'écart type (σ) : ");
    scanf("%lf", &std_dev);

    printf("Valeurs d'entrée :\n");
    printf("x = %.2f\n", x);
    printf("Moyenne (μ) = %.2f\n", mean);
    printf("Écart type (σ) = %.2f\n", std_dev);

    return 0;
}

Compilons et exécutons le programme :

gcc normal_pdf.c -o normal_pdf
./normal_pdf

Exemple de sortie :

Entrez le point x : 2.5
Entrez la moyenne (μ) : 0
Entrez l'écart type (σ) : 1
Valeurs d'entrée :
x = 2.50
Moyenne (μ) = 0.00
Écart type (σ) = 1.00

Ce code démontre comment :

  1. Utiliser scanf() pour lire des nombres à virgule flottante double précision
  2. Stocker les valeurs d'entrée pour x, la moyenne et l'écart type
  3. Afficher les valeurs d'entrée pour confirmer la saisie correcte

Calcul de la PDF = (1/(σ√(2π))) * exp(-((x-μ)²/(2σ²)))

Dans cette étape, nous étendrons notre programme précédent pour calculer la fonction de densité de probabilité (PDF) de la distribution normale à l'aide de la formule mathématique.

Mettez à jour le fichier normal_pdf.c :

nano ~/project/normal_pdf.c

Remplacez le contenu précédent par :

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

double compute_normal_pdf(double x, double mean, double std_dev) {
    // Calcul de la PDF en utilisant la formule de la distribution normale standard
    double pi = 3.14159265358979323846;
    double coefficient = 1.0 / (std_dev * sqrt(2 * pi));
    double exponent = -pow(x - mean, 2) / (2 * pow(std_dev, 2));

    return coefficient * exp(exponent);
}

int main() {
    double x, mean, std_dev, pdf;

    printf("Entrez le point x : ");
    scanf("%lf", &x);

    printf("Entrez la moyenne (μ) : ");
    scanf("%lf", &mean);

    printf("Entrez l'écart type (σ) : ");
    scanf("%lf", &std_dev);

    // Calcul de la PDF
    pdf = compute_normal_pdf(x, mean, std_dev);

    printf("Valeurs d'entrée :\n");
    printf("x = %.2f\n", x);
    printf("Moyenne (μ) = %.2f\n", mean);
    printf("Écart type (σ) = %.2f\n", std_dev);
    printf("Densité de probabilité = %.6f\n", pdf);

    return 0;
}

Compilez le programme avec la bibliothèque mathématique :

gcc ~/project/normal_pdf.c -o ~/project/normal_pdf -lm

Exécutez le programme :

~/project/normal_pdf

Exemple de sortie :

Entrez le point x : 2.5
Entrez la moyenne (μ) : 0
Entrez l'écart type (σ) : 1
Valeurs d'entrée :
x = 2.50
Moyenne (μ) = 0.00
Écart type (σ) = 1.00
Densité de probabilité = 0.017528

Points clés de cette implémentation :

  1. Nous avons créé une fonction séparée compute_normal_pdf() pour calculer la PDF.
  2. Nous avons utilisé les fonctions de la bibliothèque math.h comme sqrt(), exp() et pow().
  3. Nous avons implémenté la formule standard de la PDF de la distribution normale.
  4. Nous avons affiché la densité de probabilité calculée.

Affichage de la valeur

Dans cette dernière étape, nous améliorerons notre programme de PDF de distribution normale en ajoutant des options de formatage de sortie et de visualisation plus détaillées.

Mettez à jour le fichier normal_pdf.c :

nano ~/project/normal_pdf.c

Remplacez le contenu précédent par :

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

double compute_normal_pdf(double x, double mean, double std_dev) {
    double pi = 3.14159265358979323846;
    double coefficient = 1.0 / (std_dev * sqrt(2 * pi));
    double exponent = -pow(x - mean, 2) / (2 * pow(std_dev, 2));

    return coefficient * exp(exponent);
}

void print_pdf_details(double x, double mean, double std_dev, double pdf) {
    printf("\n--- Détails de la PDF de la distribution normale ---\n");
    printf("Point (x)               : %.2f\n", x);
    printf("Moyenne (μ)               : %.2f\n", mean);
    printf("Écart type (σ)          : %.2f\n", std_dev);
    printf("Densité de probabilité (f(x)): %.6f\n", pdf);

    // Ajout d'une interprétation de la valeur de la PDF
    if (pdf > 0.3) {
        printf("Interprétation : Densité de probabilité élevée\n");
    } else if (pdf > 0.1) {
        printf("Interprétation : Densité de probabilité modérée\n");
    } else {
        printf("Interprétation : Densité de probabilité faible\n");
    }
}

int main() {
    double x, mean, std_dev, pdf;

    printf("Calculateur de la fonction de densité de probabilité de la distribution normale\n");
    printf("Entrez le point x : ");
    scanf("%lf", &x);

    printf("Entrez la moyenne (μ) : ");
    scanf("%lf", &mean);

    printf("Entrez l'écart type (σ) : ");
    scanf("%lf", &std_dev);

    // Calcul de la PDF
    pdf = compute_normal_pdf(x, mean, std_dev);

    // Affichage des résultats détaillés
    print_pdf_details(x, mean, std_dev, pdf);

    return 0;
}

Compilez le programme :

gcc ~/project/normal_pdf.c -o ~/project/normal_pdf -lm

Exécutez le programme :

~/project/normal_pdf

Exemple de sortie :

Calculateur de la fonction de densité de probabilité de la distribution normale
Entrez le point x : 2.5
Entrez la moyenne (μ) : 0
Entrez l'écart type (σ) : 1

--- Détails de la PDF de la distribution normale ---
Point (x)               : 2.50
Moyenne (μ)               : 0.00
Écart type (σ)          : 1.00
Densité de probabilité (f(x)): 0.017528
Interprétation : Densité de probabilité faible

Améliorations clés de cette implémentation :

  1. Ajout d'une fonction dédiée print_pdf_details() pour une sortie formatée.
  2. Inclusion d'une interprétation simple de la valeur de la PDF.
  3. Interface utilisateur améliorée avec un titre descriptif.
  4. Conservation de la logique de calcul de la PDF principale des étapes précédentes.

Résumé

Dans ce laboratoire, nous avons appris à lire les valeurs d'entrée pour la fonction de densité de probabilité (PDF) de la distribution normale en C, y compris le point x, la moyenne μ et l'écart type σ. Nous avons ensuite implémenté la formule mathématique pour calculer la PDF, ce qui implique le calcul des termes coefficient et exposant. L'étape finale consiste à afficher la valeur de la PDF calculée.

Les points clés appris dans ce laboratoire sont : 1) l'utilisation de scanf() pour lire des nombres à virgule flottante double précision, 2) le stockage des valeurs d'entrée pour x, la moyenne et l'écart type, 3) le calcul de la PDF en utilisant la formule standard de la distribution normale, et 4) l'affichage de la valeur de la PDF résultante.