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:
- Utilizar
scanf()para ler números de ponto flutuante de precisão dupla. - Armazenar valores de entrada para x, média e desvio padrão.
- 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:
- Criámos uma função separada
compute_normal_pdf()para calcular a PDF. - Utilizámos funções da biblioteca
math.h, comosqrt(),exp()epow(). - Implementámos a fórmula padrão da PDF da distribuição normal.
- 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:
- Adicionámos uma função dedicada
print_pdf_details()para saída formatada. - Incluímos uma interpretação simples do valor da PDF.
- Interface de utilizador melhorada com um título descritivo.
- 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.



