Imprimir a Integral Aproximada
Neste passo, melhoraremos o nosso programa de aproximação da integral, adicionando mais detalhes à saída e comparando o resultado numérico com o valor da integral exata.
Abra o ficheiro de origem anterior e atualize o código:
cd ~/project
nano integral_approximation.c
Modifique o código para incluir uma saída mais completa:
#include <stdio.h>
#include <math.h>
// Definir a função a integrar f(x)
double f(double x) {
return x * x;
}
// Cálculo da integral exata para x^2 de 0 a 1
double exactIntegral() {
return 1.0 / 3.0;
}
// Implementação da Regra do Trapézio
double trapezoidalRule(double a, double b, int n) {
double h = (b - a) / n; // Largura de cada trapézio
double sum = 0.5 * (f(a) + f(b)); // Primeiros e últimos pontos
for (int i = 1; i < n; i++) {
double x = a + i * h;
sum += f(x);
}
return sum * h;
}
int main() {
// Definir o intervalo [a, b]
double a = 0.0; // Limite inferior
double b = 1.0; // Limite superior
int n = 100; // Número de trapézios
double integralAproximada = trapezoidalRule(a, b, n);
double exata = exactIntegral();
double erroAbsoluto = fabs(integralAproximada - exata);
double erroPercentual = (erroAbsoluto / exata) * 100.0;
// Saída formatada com informações detalhadas
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 Trapézios: %d\n", n);
printf("\nResultados Numéricos:\n");
printf("Integral Aproximada: %.6f\n", integralAproximada);
printf("Integral Exata: %.6f\n", exata);
printf("\nAnálise de Erro:\n");
printf("Erro Absoluto: %.6f\n", erroAbsoluto);
printf("Erro Percentual: %.4f%%\n", erroPercentual);
return 0;
}
Compile e execute o código atualizado:
gcc -o integral_approximation integral_approximation.c -lm
./integral_approximation
Saída de exemplo:
Resultados da Aproximação da Integral
-------------------------------------
Função: f(x) = x^2
Intervalo: [0.00, 1.00]
Número de Trapézios: 100
Resultados Numéricos:
Integral Aproximada: 0.333333
Integral Exata: 0.333333
Análise de Erro:
Erro Absoluto: 0.000000
Erro Percentual: 0.0000%
Melhorias chave nesta versão:
- Adicionada a função
exactIntegral() para comparar o resultado numérico.
- Calculados erros absoluto e percentual.
- Fornecida uma saída mais detalhada e formatada.