Aproximar una Derivada en un Punto con C

CBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderemos a aproximar la derivada de una función en un punto específico utilizando el lenguaje de programación C. Empezaremos definiendo una función cuadrática simple, luego usaremos un pequeño valor h para calcular la derivada numérica utilizando el método de diferencias. Finalmente, imprimiremos la derivada aproximada. Este laboratorio tiene como objetivo proporcionar una comprensión práctica de la aproximación de derivadas, un concepto fundamental en cálculo y geometría analítica.

Definir la Función f(x)

En este paso, definiremos una función matemática f(x) en C que se utilizará para demostrar la aproximación de la derivada. Crearemos una función cuadrática simple para ilustrar el concepto.

Primero, creemos un nuevo archivo C en el directorio ~/project:

cd ~/project
nano derivative_approximation.c

Ahora, escribamos el código inicial para nuestra función:

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

// Definir una función cuadrática f(x) = x^2 + 2x + 1
double f(double x) {
    return x * x + 2 * x + 1;
}

int main() {
    double x = 2.0;  // Punto en el que aproximaremos la derivada
    printf("Función f(x) = x^2 + 2x + 1\n");
    printf("Evaluada en x = %.2f: f(x) = %.2f\n", x, f(x));

    return 0;
}

Compilamos y ejecutamos el código para verificar nuestra función:

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

Salida de ejemplo:

Función f(x) = x^2 + 2x + 1
Evaluada en x = 2.00: f(x) = 9.00
Explicación del código
  • Definimos una función cuadrática f(x) = x^2 + 2x + 1
  • La función toma una entrada double x y devuelve un resultado double
  • En la función main(), demostramos la evaluación de la función en x = 2
  • Usamos printf() para mostrar los detalles de la función y su valor

Usar un Pequeño h y Calcular (f(x+h)-f(x))/h

En este paso, modificaremos nuestro código anterior para aproximar la derivada utilizando el método de diferencias. Introduciremos un pequeño valor h para calcular la derivada numérica.

Actualicemos el archivo derivative_approximation.c:

nano ~/project/derivative_approximation.c

Reemplace la función main() anterior con el siguiente código:

#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;
}

// 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 = 0.0001;  // Valor pequeño para el método de diferencias

    double approx_derivative = approximate_derivative(x, h);

    printf("Función: f(x) = x^2 + 2x + 1\n");
    printf("Aproximando la derivada en x = %.2f\n", x);
    printf("Tamaño del paso h = %.6f\n", h);
    printf("Derivada aproximada: %.4f\n", approx_derivative);

    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
Aproximando la derivada en x = 2.00
Tamaño del paso h = 0.000100
Derivada aproximada: 5.0001
Explicación del código
  • Introducimos una nueva función approximate_derivative() que calcula la derivada usando el método de diferencias.
  • h es un valor pequeño (0.0001) que ayuda a aproximar la tasa de cambio instantánea.
  • La fórmula (f(x+h) - f(x)) / h aproxima la derivada en el punto x.
  • Imprimimos el valor de la derivada aproximada.

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.

Resumen

En este laboratorio, primero definimos una función cuadrática f(x) = x^2 + 2x + 1 en el lenguaje de programación C. Luego, introdujimos un pequeño valor h para aproximar la derivada de la función utilizando el método de diferencias, (f(x+h)-f(x))/h. Finalmente, imprimimos el valor de la derivada aproximada.