viernes, 7 de noviembre de 2014

Métodos numéricos, Derivación numérica

La derivación numérica es una técnica de análisis numérico para calcular una aproximación a la derivada de una función en un punto utilizando los valores y propiedades de la misma.
Por definición la derivada de una función f(x) es:

f′(x)=limh→0f(x+h)−f(x)h
Las aproximaciones numéricas que podamos hacer (para h > 0) serán:
Diferencias hacia adelante:
f′(x0)≈f(x0+h)−f(x0)h
Diferencias hacia atrás:
f′(x0)≈f(x0)−f(x0−h)h
La aproximación de la derivada por este método entrega resultados aceptables con un determinado error. Para minimizar los errores se estima que el promedio de ambas entrega la mejor aproximación numérica al problema dado:

Diferencias centrales:
f′(x0)≈f(x0+h)−f(x0−h)2h

f′′(x0)≈f(x0+h)−2f(x0)+f(x0−h)h2

2 comentarios:

  1. Es importante agregar que la derivación numérica se utiliza para realizar derivadas que no tienen una solución conocida, o que su desarrollo sea muy complicado o demasiado largo. Además es menos costoso calcular la aproximación que el valor exacto. O bien sea Porque sólo conocemos los valores de f en un número finito de puntos x.

    El codigo de este metodo en Matlab es el siguente:
    #include
    #include
    #include

    double f (double x, void * params)
    {
    return pow (x, 1.5);
    }

    int
    main (void)
    {
    gsl_function F;
    double result, abserr;

    F.function = &f;
    F.params = 0;

    printf ("f(x) = x^(3/2)\n");

    gsl_deriv_central (&F, 2.0, 1e-8, &result, &abserr);
    printf ("x = 2.0\n");
    printf ("f'(x) = %.10f +/- %.10f\n", result, abserr);
    printf ("exact = %.10f\n\n", 1.5 * sqrt(2.0));

    gsl_deriv_forward (&F, 0.0, 1e-8, &result, &abserr);
    printf ("x = 0.0\n");
    printf ("f'(x) = %.10f +/- %.10f\n", result, abserr);
    printf ("exact = %.10f\n", 0.0);

    return 0;
    }

    En los siguentes enlaces podemos encontrar mucha mas informacion sobre la derivacion numerica con ejemplos y codigos de este en diferentes lenguajes de programacion.

    http://cypascal.blogspot.com/2012/12/derivacion-numerica.html
    http://5minutosdematlab.blogspot.com/2011/09/codigo-para-obtener-la-primera-derivada.html
    http://www.ugr.es/~anpalom/practica8.html

    ResponderEliminar
  2. Felicitaciones a los docentes y estudiantes que hacen aportes al blog de Análisis Numérico. En este caso en particular felicitar a Fabio Alejandro Valencia y a sus compañeros de equipo, quiénes con su exposición demostraron que ellos pueden ser actores de su propia construcción y nos acercaron entre otros a los aporte que hace el Dr. David Paul Ausubel sobre el aprendizaje significativo que dice "El aprendizaje puede darse por recepción o por descubrimiento" Y en este caso se hace por descubrimiento, porque los estudiantes construyen su conocimiento a través del descubrimiento de contenidos!!!

    ResponderEliminar