Cálculo de derivadas de orden superior en C++

Ejemplo uso del elemento div y del atributo id

El objetivo del desarrollo de estos metodos fue encontrar algoritmos que nos permitieran calcular derivadas de orden superior mediante el lenguaje de programación C++, partiendo de la definición formal de derivada progresiva.



A continuación se presenta una explicación a detalle del desarrollo, algoritmo y limitantes presentes en cada método

DEFINICIÓN DE DERIVADA CONSIDERADA

Entendemos como concepto general de derivada a la razón de cambio instantaneo en un punto especifico para cualquier función F(x), en otras palabras podriamos decir que la derivada de una función es la pendiente de la recta tangente a un solo punto de la misma, evaluandola en dos puntos con una distancia de separacion que tiende a cero a la que llamamos delta equis (Δx).

Definiendo la derivada como un limite cuanto Δx tiende a cero podemos obtener tres formulas cuando consideramos los limites extremos, estas formulas son las que se le conocen como: derivada progresiva, regresiva y central

NOTA: Para facilidad de desarrollo, se decidió usar la formula de derivada progresiva, siendo esta la más utilizada para demostraciones matemáticas

MÉTODO DE FUNCIONES EN CASCADA

Desarrollo

Para comprender el funcionamiento de este método es necesario comprender la idea de una segunda derivada, que no es más que la derivada de la función de una primera derivada, por lo que al representar esto mediante formulas obtenemos lo siguiente:

Tomando en cuenta la formula anterior podemos notar que para cada función que programemos es necesario hacer un llamado a la derivada anterior a la del orden que deseamos calcular, consiguiendo funciones simples para calcular cada derivada.

Algoritmo

Para esta investigación se hizo el desarrollo de las funciones para encontrar hasta la cuarta derivada, en donde se definio el valor de retorno como "LONG DOUBLE", debido a la naturaleza de Δx, parámetro que puede contar con valores flotantes con un número considerable de decimales

Limitaciones

Para este método se presentaron las siguientes limitantes:


  • Para el calculo de una derivada es necesario desarrolar las funciones para todas las derivadas anteriores
  • Se reuiere de un función diferente para cada derivada
  • El llamado en cascada puede llegar a saturar la memoria para derivadas de alto orden
  • MÉTODO DE SUSTITUCIÓN

    Desarrollo

    La lógica para este método parte de la idea de segunda derivada planteada en el método anterior, no obstante, para evitar la dependencia de una función externa, se sustituye la formula de derivada dentro de otra, obteniendo una sola formula para hallar la derivada de forma directa:

    Haciendo el despeje correspondiente, obtenemos la siguiente definición para la segunda derivada:

    Haciendo el algebra necesaria para cada derivada, obtuvimos las siguientes formulas que permiten a la función un calculo más sencillo con operaciones aritmeticas básicas.

    Algoritmo

    En cuestión de programación encontramos algo similar al método anterior, donde es necesario una función para cada derivada, no obstante, para esta solución cada derivada es independiente entre si, lo que nos permitir contar solamente con las funciones que requerimos. Por otro lado al igual que las funciones de cascada el valor de retorno fue definidio como "LONG DOUBLE" especialmente por la potencia a la que se somete la variable h, llegando a valores flotantes con un crecimiento exponencial según el orden de la derivada

    Limitaciones

    Para este método se presentaron las siguientes limitantes:


  • Para cada derivada es necesario realizar un procedimiento algebraico que incrementa de complejidad gradualmente, por lo que esta sujeto a un factor de error humano
  • La potencia a la que se somete la variable h puede causar un overflow para el valor de retorno de la función
  • Es necesario la creación de una función para cada orden de derivada que necesitemos calcular
  • MÉTODO RECURSIVO

    Desarrollo

    Para una solución recursiva, debemos tener en cuenta las definiciones que ya hemos planteado para una derivada de orden superior, y con esto representarlas como una serie, en donde cada uno de los terminos es una derivada de orden n, con n mayor a cero, planteando dicha serie tenemos que:

    Con nuestra serie defnida, podemos obtener los datos esenciales para desarrollar nuestra función:

  • ¿Dónde detenerse?, debemos detenernos antes de que n llegue a cero, es decir n=1
  • ¿Qué parámetros usar?, de acuerdo a nuestra serie requerimos de tres valores, 'x' o punto de evalución, 'h' o delta equis y 'n' el orden de la derivada a calcular
  • Algoritmo

    Para este caso se desarrollo una sola función que recibe tres parámetros con los que devuelve la derivada del orden solicitado, a diferencia de los primeros dos métodos no es necesario contar con múltiples funciones, pues, la misma permite hallar derivadas de cualquier orden, adicionalmente nos facilita su uso y disminuye la cantidad de código a utilizar

    Limitaciones

    Para este método se presentaron las siguientes limitantes:


  • Al ocupar recursividad cargamos con el porcentaje de error del calculo en cada iteración, lo que altera nuestros resultados para derivadas de orden demasiado alto
  • DEMOSTRACIÓN PRÁCTICA

    Resultados para la Función
    f(x) =0.2 + 25x -200x^2 + 675x^3-900x^4+ 400x^5

    usando x=1 y Δx=0.0005

    Contacto
    manuelestradamaldonado123@gmail.com
    amilcar.cs18@gmail.com
    yael.soto@cejv.edu.mx

    Comentarios

    Entradas populares de este blog

    Método Numérico de Euler en C++