Aproximar uma Integral Usando a Regra de Simpson em C

CBeginner
Pratique Agora

Introdução

Neste laboratório, aprenderá a aproximar uma integral usando a Regra de Simpson em C. O laboratório cobre o processo passo a passo de definir a função a integrar, o intervalo de integração e, em seguida, implementar o algoritmo da Regra de Simpson para calcular a integral aproximada. No final deste laboratório, terá um programa C funcional que pode integrar numericamente uma função dada num intervalo especificado usando o método da Regra de Simpson.

O laboratório consiste em duas etapas principais: definir a função e o intervalo e, em seguida, usar a Regra de Simpson com subintervalos pares para calcular a integral aproximada. Este exercício prático ajudará a ganhar experiência prática na aplicação de técnicas de integração numérica na programação em C.

Definir f(x) e Intervalo [a,b]

Nesta etapa, configuraremos os componentes fundamentais para implementar a Regra de Simpson para integração numérica em C. Definiremos a função a integrar e especificaremos o intervalo de integração.

Primeiro, crie um novo arquivo C no diretório ~/project:

cd ~/project
nano simpson_integration.c

Agora, vamos escrever o código inicial para definir nossa função e intervalo:

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

// Função a integrar: f(x) = x^2
double f(double x) {
    return x * x;
}

int main() {
    // Definir o intervalo de integração [a, b]
    double a = 0.0;  // Limite inferior
    double b = 1.0;  // Limite superior

    printf("Integrando f(x) = x^2 de %f a %f\n", a, b);

    return 0;
}

Vamos analisar o código:

  1. Incluímos os cabeçalhos necessários: stdio.h para entrada/saída e math.h para funções matemáticas.
  2. f(x) é definida como uma função quadrática simples x^2, que integraremos.
  3. Em main(), definimos o intervalo de integração de 0 a 1.
  4. Imprimimos o intervalo para maior clareza.

Compile e execute o código para verificar:

gcc simpson_integration.c -o simpson_integration -lm
./simpson_integration

Saída de exemplo:

Integrando f(x) = x^2 de 0.000000 a 1.000000

Usar a Regra de Simpson com Subintervalos Pares

Nesta etapa, implementaremos o algoritmo da Regra de Simpson para aproximar a integral definida da nossa função. Adicionaremos a função de integração ao nosso programa C existente.

Abra o arquivo anterior:

cd ~/project
nano simpson_integration.c

Atualize o código para incluir a implementação da Regra de Simpson:

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

// Função a integrar: f(x) = x^2
double f(double x) {
    return x * x;
}

// 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)

    double integral = simpsons_rule(a, b, n);

    printf("Integral de f(x) = x^2 de %f a %f\n", a, b);
    printf("Aproximação usando a Regra de Simpson com %d subintervalos: %f\n", n, integral);

    return 0;
}

Compile e execute o código:

gcc simpson_integration.c -o simpson_integration -lm
./simpson_integration

Saída de exemplo:

Integral de f(x) = x^2 de 0.000000 a 1.000000
Aproximação usando a Regra de Simpson com 100 subintervalos: 0.333333

Vamos analisar a implementação da Regra de Simpson:

  1. simpsons_rule() recebe os limites do intervalo e o número de subintervalos.
  2. h calcula a largura de cada subintervalo.
  3. Iniciamos com o primeiro e o último ponto do intervalo.
  4. O loop adiciona contribuições ponderadas dos pontos intermediários.
  5. Pontos pares são multiplicados por 2, pontos ímpares por 4.
  6. O resultado final é escalado por h/3.

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:

  1. Adicionada a função exact_integral() para calcular o valor verdadeiro da integral.
  2. Calculado o erro absoluto e relativo.
  3. Criado um resultado formatado mostrando os resultados detalhados da integração.

Resumo

Neste laboratório, definimos inicialmente a função a integrar, f(x) = x^2, e o intervalo de integração [a, b] = [0, 1]. Em seguida, implementamos o algoritmo da Regra de Simpson para aproximar a integral definida da função. A Regra de Simpson envolve dividir o intervalo em um número par de subintervalos e calcular a soma ponderada dos valores da função nos pontos finais e pontos médios desses subintervalos. Finalmente, imprimiremos o valor aproximado da integral obtido usando a Regra de Simpson.