Aproximación de la PDF de la Distribución Normal en C

CBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderemos a aproximar la Función de Densidad de Probabilidad (PDF) de la Distribución Normal en C. Primero, leeremos los valores de entrada para el punto (x), la media (μ) y la desviación estándar (σ), luego calcularemos la PDF utilizando la fórmula estándar. Finalmente, imprimiremos el valor de la PDF calculada.

El laboratorio cubre el proceso paso a paso de implementar esta funcionalidad en C, incluyendo la lectura de la entrada del usuario, el cálculo de la PDF y la visualización del resultado. Este laboratorio tiene como objetivo proporcionar una comprensión práctica del trabajo con conceptos de probabilidad y combinatoria en la programación en C.

Leer x, media μ, desviación estándar σ

En este paso, aprenderemos a leer valores de entrada para calcular la Función de Densidad de Probabilidad (PDF) de la Distribución Normal en C. Crearemos un programa que tome tres parámetros clave: x (el punto), μ (la media) y σ (la desviación estándar).

Primero, creemos un nuevo archivo C para nuestra implementación:

cd ~/project
nano normal_pdf.c

Ahora, escribamos el código inicial para leer los valores de entrada:

#include <stdio.h>

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

    printf("Ingrese el punto x: ");
    scanf("%lf", &x);

    printf("Ingrese la media (μ): ");
    scanf("%lf", &mean);

    printf("Ingrese la desviación estándar (σ): ");
    scanf("%lf", &std_dev);

    printf("Valores de entrada:\n");
    printf("x = %.2f\n", x);
    printf("Media (μ) = %.2f\n", mean);
    printf("Desviación Estándar (σ) = %.2f\n", std_dev);

    return 0;
}

Compile y ejecuta el programa:

gcc normal_pdf.c -o normal_pdf
./normal_pdf

Salida de ejemplo:

Ingrese el punto x: 2.5
Ingrese la media (μ): 0
Ingrese la desviación estándar (σ): 1
Valores de entrada:
x = 2.50
Media (μ) = 0.00
Desviación Estándar (σ) = 1.00

Este código demuestra cómo:

  1. Usar scanf() para leer números de punto flotante de doble precisión.
  2. Almacenar los valores de entrada para x, la media y la desviación estándar.
  3. Imprimir los valores de entrada para confirmar la entrada correcta.

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

En este paso, ampliaremos nuestro programa anterior para calcular la Función de Densidad de Probabilidad (PDF) para la Distribución Normal utilizando la fórmula matemática.

Actualiza el archivo normal_pdf.c:

nano ~/project/normal_pdf.c

Reemplaza el contenido anterior con:

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

double compute_normal_pdf(double x, double mean, double std_dev) {
    // Calcular PDF usando la fórmula estándar de la distribución normal
    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("Ingrese el punto x: ");
    scanf("%lf", &x);

    printf("Ingrese la media (μ): ");
    scanf("%lf", &mean);

    printf("Ingrese la desviación estándar (σ): ");
    scanf("%lf", &std_dev);

    // Calcular PDF
    pdf = compute_normal_pdf(x, mean, std_dev);

    printf("Valores de entrada:\n");
    printf("x = %.2f\n", x);
    printf("Media (μ) = %.2f\n", mean);
    printf("Desviación Estándar (σ) = %.2f\n", std_dev);
    printf("Densidad de Probabilidad = %.6f\n", pdf);

    return 0;
}

Compila el programa con la biblioteca matemática:

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

Ejecuta el programa:

~/project/normal_pdf

Salida de ejemplo:

Ingrese el punto x: 2.5
Ingrese la media (μ): 0
Ingrese la desviación estándar (σ): 1
Valores de entrada:
x = 2.50
Media (μ) = 0.00
Desviación Estándar (σ) = 1.00
Densidad de Probabilidad = 0.017528

Puntos clave de esta implementación:

  1. Se creó una función separada compute_normal_pdf() para calcular la PDF.
  2. Se utilizaron funciones de la biblioteca math.h como sqrt(), exp() y pow().
  3. Se implementó la fórmula estándar de la PDF de la distribución normal.
  4. Se imprimió la densidad de probabilidad calculada.

Imprimir el Valor

En este paso final, mejoraremos nuestro programa de PDF de la Distribución Normal agregando opciones de formato de salida más detalladas y visualización.

Actualiza el archivo normal_pdf.c:

nano ~/project/normal_pdf.c

Reemplaza el contenido anterior con:

#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--- Detalles de la PDF de la Distribución Normal ---\n");
    printf("Punto (x)               : %.2f\n", x);
    printf("Media (μ)               : %.2f\n", mean);
    printf("Desviación Estándar (σ)  : %.2f\n", std_dev);
    printf("Densidad de Probabilidad (f(x)): %.6f\n", pdf);

    // Agrega una interpretación del valor de la PDF
    if (pdf > 0.3) {
        printf("Interpretación: Alta densidad de probabilidad\n");
    } else if (pdf > 0.1) {
        printf("Interpretación: Densidad de probabilidad moderada\n");
    } else {
        printf("Interpretación: Baja densidad de probabilidad\n");
    }
}

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

    printf("Calculadora de la Función de Densidad de Probabilidad de la Distribución Normal\n");
    printf("Ingrese el punto x: ");
    scanf("%lf", &x);

    printf("Ingrese la media (μ): ");
    scanf("%lf", &mean);

    printf("Ingrese la desviación estándar (σ): ");
    scanf("%lf", &std_dev);

    // Calcular PDF
    pdf = compute_normal_pdf(x, mean, std_dev);

    // Imprimir resultados detallados
    print_pdf_details(x, mean, std_dev, pdf);

    return 0;
}

Compila el programa:

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

Ejecuta el programa:

~/project/normal_pdf

Salida de ejemplo:

Calculadora de la Función de Densidad de Probabilidad de la Distribución Normal
Ingrese el punto x: 2.5
Ingrese la media (μ): 0
Ingrese la desviación estándar (σ): 1

--- Detalles de la PDF de la Distribución Normal ---
Punto (x)               : 2.50
Media (μ)               : 0.00
Desviación Estándar (σ)  : 1.00
Densidad de Probabilidad (f(x)): 0.017528
Interpretación: Baja densidad de probabilidad

Mejoras clave en esta implementación:

  1. Se agregó una función dedicada print_pdf_details() para la salida formateada.
  2. Se incluyó una interpretación simple del valor de la PDF.
  3. Se mejoró la interfaz de usuario con un título descriptivo.
  4. Se mantuvo la lógica central de cálculo de la PDF de los pasos anteriores.

Resumen

En este laboratorio, aprendimos cómo leer valores de entrada para la Función de Densidad de Probabilidad (PDF) de la Distribución Normal en C, incluyendo el punto x, la media μ y la desviación estándar σ. Luego, implementamos la fórmula matemática para calcular la PDF, que implica calcular los términos del coeficiente y el exponente. El paso final es imprimir el valor de la PDF calculada.

Los puntos clave aprendidos en este laboratorio son: 1) usar scanf() para leer números de punto flotante de doble precisión, 2) almacenar los valores de entrada para x, la media y la desviación estándar, 3) calcular la PDF utilizando la fórmula estándar de la distribución normal, y 4) imprimir el valor resultante de la PDF.