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
doublexe retorna um resultadodouble - 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)) / haproxima 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
hpara 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
hlevam 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.



