Aproximação da PDF da Distribuição Normal em C

CBeginner
Pratique Agora

Introdução

Neste laboratório, aprenderemos a aproximar a Função Densidade de Probabilidade (PDF) da Distribuição Normal em C. Primeiro, leremos os valores de entrada para o ponto (x), média (μ) e desvio padrão (σ), em seguida, calcularemos a PDF usando a fórmula padrão. Finalmente, imprimiremos o valor da PDF calculada.

O laboratório cobre o processo passo a passo de implementação desta funcionalidade em C, incluindo a leitura de entrada do utilizador, o cálculo da PDF e a exibição do resultado. Este laboratório tem como objetivo fornecer uma compreensão prática de como trabalhar com conceitos de probabilidade e combinatória na programação em C.

Ler x, média μ, desvio padrão σ

Neste passo, aprenderemos a ler valores de entrada para calcular a Função Densidade de Probabilidade (PDF) da Distribuição Normal em C. Criaremos um programa que recebe três parâmetros chave: x (o ponto), μ (média) e σ (desvio padrão).

Primeiro, criemos um novo ficheiro C para a nossa implementação:

cd ~/project
nano normal_pdf.c

Agora, escrevamos o código inicial para ler os valores de entrada:

#include <stdio.h>

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

    printf("Introduza o ponto x: ");
    scanf("%lf", &x);

    printf("Introduza a média (μ): ");
    scanf("%lf", &mean);

    printf("Introduza o desvio padrão (σ): ");
    scanf("%lf", &std_dev);

    printf("Valores de entrada:\n");
    printf("x = %.2f\n", x);
    printf("Média (μ) = %.2f\n", mean);
    printf("Desvio Padrão (σ) = %.2f\n", std_dev);

    return 0;
}

Compile e execute o programa:

gcc normal_pdf.c -o normal_pdf
./normal_pdf

Exemplo de saída:

Introduza o ponto x: 2.5
Introduza a média (μ): 0
Introduza o desvio padrão (σ): 1
Valores de entrada:
x = 2.50
Média (μ) = 0.00
Desvio Padrão (σ) = 1.00

Este código demonstra como:

  1. Utilizar scanf() para ler números de ponto flutuante de precisão dupla.
  2. Armazenar valores de entrada para x, média e desvio padrão.
  3. Imprimir os valores de entrada para confirmar a entrada correta.

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

Neste passo, estenderemos o nosso programa anterior para calcular a Função Densidade de Probabilidade (PDF) para a Distribuição Normal utilizando a fórmula matemática.

Atualize o ficheiro normal_pdf.c:

nano ~/project/normal_pdf.c

Substitua o conteúdo anterior por:

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

double compute_normal_pdf(double x, double mean, double std_dev) {
    // Calcular PDF usando a fórmula padrão da distribuição 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("Introduza o ponto x: ");
    scanf("%lf", &x);

    printf("Introduza a média (μ): ");
    scanf("%lf", &mean);

    printf("Introduza o desvio padrão (σ): ");
    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("Média (μ) = %.2f\n", mean);
    printf("Desvio Padrão (σ) = %.2f\n", std_dev);
    printf("Densidade de Probabilidade = %.6f\n", pdf);

    return 0;
}

Compile o programa com a biblioteca matemática:

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

Execute o programa:

~/project/normal_pdf

Exemplo de saída:

Introduza o ponto x: 2.5
Introduza a média (μ): 0
Introduza o desvio padrão (σ): 1
Valores de entrada:
x = 2.50
Média (μ) = 0.00
Desvio Padrão (σ) = 1.00
Densidade de Probabilidade = 0.017528

Pontos chave desta implementação:

  1. Criámos uma função separada compute_normal_pdf() para calcular a PDF.
  2. Utilizámos funções da biblioteca math.h, como sqrt(), exp() e pow().
  3. Implementámos a fórmula padrão da PDF da distribuição normal.
  4. Imprimimos a densidade de probabilidade calculada.

Imprimir o Valor

Neste passo final, melhoraremos o nosso programa de PDF da Distribuição Normal adicionando opções de formatação de saída mais detalhadas e opções de visualização.

Atualize o ficheiro normal_pdf.c:

nano ~/project/normal_pdf.c

Substitua o conteúdo anterior por:

#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--- Detalhes da PDF da Distribuição Normal ---\n");
    printf("Ponto (x)               : %.2f\n", x);
    printf("Média (μ)               : %.2f\n", mean);
    printf("Desvio Padrão (σ)      : %.2f\n", std_dev);
    printf("Densidade de Probabilidade (f(x)): %.6f\n", pdf);

    // Adicionar interpretação do valor da PDF
    if (pdf > 0.3) {
        printf("Interpretação: Alta densidade de probabilidade\n");
    } else if (pdf > 0.1) {
        printf("Interpretação: Densidade de probabilidade moderada\n");
    } else {
        printf("Interpretação: Baixa densidade de probabilidade\n");
    }
}

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

    printf("Calculadora de Densidade de Probabilidade da Distribuição Normal\n");
    printf("Introduza o ponto x: ");
    scanf("%lf", &x);

    printf("Introduza a média (μ): ");
    scanf("%lf", &mean);

    printf("Introduza o desvio padrão (σ): ");
    scanf("%lf", &std_dev);

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

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

    return 0;
}

Compile o programa:

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

Execute o programa:

~/project/normal_pdf

Exemplo de saída:

Calculadora de Densidade de Probabilidade da Distribuição Normal
Introduza o ponto x: 2.5
Introduza a média (μ): 0
Introduza o desvio padrão (σ): 1

--- Detalhes da PDF da Distribuição Normal ---
Ponto (x)               : 2.50
Média (μ)               : 0.00
Desvio Padrão (σ)      : 1.00
Densidade de Probabilidade (f(x)): 0.017528
Interpretação: Baixa densidade de probabilidade

Melhorias chave nesta implementação:

  1. Adicionámos uma função dedicada print_pdf_details() para saída formatada.
  2. Incluímos uma interpretação simples do valor da PDF.
  3. Interface de utilizador melhorada com um título descritivo.
  4. Mantivemos a lógica central de cálculo da PDF das etapas anteriores.

Summary

In this lab, we learned how to read input values for the Normal Distribution Probability Density Function (PDF) in C, including the point x, mean μ, and standard deviation σ. We then implemented the mathematical formula to compute the PDF, which involves calculating the coefficient and exponent terms. The final step is to print the computed PDF value.

The key learning points from this lab are: 1) using scanf() to read double-precision floating-point numbers, 2) storing input values for x, mean, and standard deviation, 3) computing the PDF using the standard normal distribution formula, and 4) printing the resulting PDF value.