Imprimir a Integral Aproximada
Nesta etapa final, aprimoraremos a implementação da Regra de Simpson adicionando um resultado mais detalhado e comparando a aproximação numérica com o valor exato da integral.
Abra o arquivo anterior:
cd ~/project
nano simpson_integration.c
Atualize o código para incluir um resultado mais abrangente:
#include <stdio.h>
#include <math.h>
// Função a integrar: f(x) = x^2
double f(double x) {
return x * x;
}
// Cálculo da integral exata para f(x) = x^2 de a a b
double exact_integral(double a, double b) {
return (pow(b, 3) - pow(a, 3)) / 3.0;
}
// Implementação da Regra de Simpson
double simpsons_rule(double a, double b, int n) {
double h = (b - a) / n; // Largura de cada subintervalo
double sum = f(a) + f(b); // Primeiro e último pontos
// Calcula a soma dos pontos pares e ímpares
for (int i = 1; i < n; i++) {
double x = a + i * h;
sum += (i % 2 == 0 ? 2 : 4) * f(x);
}
return (h / 3) * sum;
}
int main() {
// Definir o intervalo de integração [a, b]
double a = 0.0; // Limite inferior
double b = 1.0; // Limite superior
int n = 100; // Número de subintervalos (deve ser par)
// Calcular a aproximação e a integral exata
double approx_integral = simpsons_rule(a, b, n);
double exact_value = exact_integral(a, b);
double error = fabs(exact_value - approx_integral);
// Imprimir resultados detalhados
printf("Resultados da Aproximação da Integral:\n");
printf("------------------------------\n");
printf("Função: f(x) = x^2\n");
printf("Intervalo: [%.2f, %.2f]\n", a, b);
printf("Número de Subintervalos: %d\n\n", n);
printf("Aproximação (Regra de Simpson): %.6f\n", approx_integral);
printf("Valor Exato: %.6f\n", exact_value);
printf("Erro Absoluto: %.6f\n", error);
printf("Erro Relativo: %.4f%%\n", (error / exact_value) * 100);
return 0;
}
Compile e execute o código:
gcc simpson_integration.c -o simpson_integration -lm
./simpson_integration
Saída de exemplo:
Resultados da Aproximação da Integral:
------------------------------
Função: f(x) = x^2
Intervalo: [0.00, 1.00]
Número de Subintervalos: 100
Aproximação (Regra de Simpson): 0.333333
Valor Exato: 0.333333
Erro Absoluto: 0.000000
Erro Relativo: 0.0000%
Adições-chave nesta etapa:
- Adicionada a função
exact_integral() para calcular o valor verdadeiro da integral.
- Calculado o erro absoluto e relativo.
- Criado um resultado formatado mostrando os resultados detalhados da integração.