Aproximar uma Derivada em um Ponto em C

CBeginner
Pratique Agora

Introdução

Neste laboratório, aprenderemos a aproximar a derivada de uma função num ponto específico utilizando a linguagem C. Começaremos definindo uma função quadrática simples, em seguida, usaremos um pequeno valor h para calcular a derivada numérica utilizando o método das diferenças. Finalmente, imprimiremos a derivada aproximada. Este laboratório tem como objetivo fornecer uma compreensão prática da aproximação de derivadas, um conceito fundamental em cálculo e geometria analítica.

Definir a Função f(x)

Neste passo, definiremos uma função matemática f(x) em C que será usada para demonstrar a aproximação da derivada. Criaremos uma função quadrática simples para ilustrar o conceito.

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

cd ~/project
nano derivative_approximation.c

Agora, escreva o código inicial para nossa função:

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

// Define uma função quadrática f(x) = x^2 + 2x + 1
double f(double x) {
    return x * x + 2 * x + 1;
}

int main() {
    double x = 2.0;  // Ponto em que aproximaremos a derivada
    printf("Função f(x) = x^2 + 2x + 1\n");
    printf("Avaliada em x = %.2f: f(x) = %.2f\n", x, f(x));

    return 0;
}

Vamos compilar e executar o código para verificar nossa função:

gcc derivative_approximation.c -o derivative_approximation -lm
./derivative_approximation

Saída de exemplo:

Função f(x) = x^2 + 2x + 1
Avaliada em x = 2.00: f(x) = 9.00
Explicação do Código
  • Definimos uma função quadrática f(x) = x^2 + 2x + 1
  • A função recebe uma entrada double x e retorna um resultado double
  • Na função main(), demonstramos a avaliação da função em x = 2
  • Usamos printf() para exibir os detalhes da função e seu valor

Usar um Pequeno h e Calcular (f(x+h)-f(x))/h

Neste passo, modificaremos o código anterior para aproximar a derivada usando o método das diferenças. Introduziremos um pequeno valor h para calcular a derivada numérica.

Atualize o arquivo derivative_approximation.c:

nano ~/project/derivative_approximation.c

Substitua a função main() anterior pelo seguinte código:

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

// Função quadrática f(x) = x^2 + 2x + 1
double f(double x) {
    return x * x + 2 * x + 1;
}

// Aproximar a derivada usando o método das diferenças
double approximate_derivative(double x, double h) {
    return (f(x + h) - f(x)) / h;
}

int main() {
    double x = 2.0;  // Ponto de aproximação da derivada
    double h = 0.0001;  // Pequeno valor para o método das diferenças

    double approx_derivative = approximate_derivative(x, h);

    printf("Função: f(x) = x^2 + 2x + 1\n");
    printf("Aproximando a derivada em x = %.2f\n", x);
    printf("Tamanho do passo h = %.6f\n", h);
    printf("Derivada aproximada: %.4f\n", approx_derivative);

    return 0;
}

Compile e execute o código atualizado:

gcc derivative_approximation.c -o derivative_approximation -lm
./derivative_approximation

Saída de exemplo:

Função: f(x) = x^2 + 2x + 1
Aproximando a derivada em x = 2.00
Tamanho do passo h = 0.000100
Derivada aproximada: 5.0001
Explicação do Código
  • Introduzimos uma nova função approximate_derivative() que calcula a derivada usando o método das diferenças
  • h é um pequeno valor (0.0001) que ajuda a aproximar a taxa de variação instantânea
  • A fórmula (f(x+h) - f(x)) / h aproxima a derivada no ponto x
  • Imprimimos o valor da derivada aproximada

Imprimir a Derivada Aproximada

Neste passo, expandiremos nosso programa de aproximação de derivada para comparar a aproximação numérica com a derivada analítica e imprimir os resultados de forma mais informativa.

Atualize o arquivo derivative_approximation.c:

nano ~/project/derivative_approximation.c

Substitua o código anterior pelo seguinte:

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

// Função quadrática f(x) = x^2 + 2x + 1
double f(double x) {
    return x * x + 2 * x + 1;
}

// Derivada analítica de f(x)
double analytical_derivative(double x) {
    return 2 * x + 2;
}

// Aproximar a derivada usando o método das diferenças
double approximate_derivative(double x, double h) {
    return (f(x + h) - f(x)) / h;
}

int main() {
    double x = 2.0;  // Ponto de aproximação da derivada
    double h_values[] = {1e-1, 1e-2, 1e-3, 1e-4, 1e-5};
    int num_h = sizeof(h_values) / sizeof(h_values[0]);

    double true_derivative = analytical_derivative(x);

    printf("Função: f(x) = x^2 + 2x + 1\n");
    printf("Ponto da Derivada: x = %.2f\n", x);
    printf("Derivada Analítica: %.4f\n\n", true_derivative);

    printf("Resultados da Aproximação da Derivada:\n");
    printf("-----------------------------------\n");
    printf("Tamanho do Passo (h)   Derivada Aproximada   Erro\n");
    printf("-----------------------------------\n");

    for (int i = 0; i < num_h; i++) {
        double h = h_values[i];
        double approx_derivative = approximate_derivative(x, h);
        double error = fabs(true_derivative - approx_derivative);

        printf("%.1e             %.4f               %.6f\n",
               h, approx_derivative, error);
    }

    return 0;
}

Compile e execute o código atualizado:

gcc derivative_approximation.c -o derivative_approximation -lm
./derivative_approximation

Saída de exemplo:

Função: f(x) = x^2 + 2x + 1
Ponto da Derivada: x = 2.00
Derivada Analítica: 6.0000

Resultados da Aproximação da Derivada:
-----------------------------------
Tamanho do Passo (h)   Derivada Aproximada   Erro
-----------------------------------
1.0e-01             6.2000               0.200000
1.0e-02             6.0200               0.020000
1.0e-03             6.0020               0.002000
1.0e-04             6.0002               0.000200
1.0e-05             6.0000               0.000020
Explicação do Código
  • Adicionada a função analytical_derivative() para calcular a derivada verdadeira
  • Criado um array de diferentes tamanhos de passo h para demonstrar a convergência
  • Usado um loop para imprimir aproximações com diferentes tamanhos de passo
  • Calculado e exibido o erro entre as derivadas analítica e numérica
  • Demonstra como valores menores de h levam a aproximações mais precisas

Resumo

Neste laboratório, definimos inicialmente uma função quadrática f(x) = x^2 + 2x + 1 em programação C. Em seguida, introduzimos um pequeno valor h para aproximar a derivada da função usando o método das diferenças, (f(x+h)-f(x))/h. Finalmente, imprimimos o valor da derivada aproximada.