Imprimir la Derivada Aproximada
En este paso, ampliaremos nuestro programa de aproximación de derivadas para comparar la aproximación numérica con la derivada analítica e imprimir los resultados de una manera más informativa.
Actualice el archivo derivative_approximation.c:
nano ~/project/derivative_approximation.c
Reemplace el código anterior con el siguiente:
#include <stdio.h>
#include <math.h>
// Función cuadrá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 la derivada usando el método de diferencias
double approximate_derivative(double x, double h) {
return (f(x + h) - f(x)) / h;
}
int main() {
double x = 2.0; // Punto de aproximación de la 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("Función: f(x) = x^2 + 2x + 1\n");
printf("Punto de la Derivada: x = %.2f\n", x);
printf("Derivada Analítica: %.4f\n\n", true_derivative);
printf("Resultados de la Aproximación de la Derivada:\n");
printf("-----------------------------------\n");
printf("Tamaño del Paso (h) Derivada Aproximada Error\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 y ejecuta el código actualizado:
gcc derivative_approximation.c -o derivative_approximation -lm
./derivative_approximation
Salida de ejemplo:
Función: f(x) = x^2 + 2x + 1
Punto de la Derivada: x = 2.00
Derivada Analítica: 6.0000
Resultados de la Aproximación de la Derivada:
-----------------------------------
Tamaño del Paso (h) Derivada Aproximada Error
-----------------------------------
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
Explicación del código
- Se agregó la función
analytical_derivative() para calcular la derivada verdadera.
- Se creó un arreglo de diferentes tamaños de paso
h para demostrar la convergencia.
- Se usó un bucle para imprimir las aproximaciones con diferentes tamaños de paso.
- Se calculó y mostró el error entre las derivadas analítica y numérica.
- Demuestra cómo los valores más pequeños de
h conducen a aproximaciones más precisas.