Para ciertas aplicaciones en Excel, como la búsqueda de un valor objetivo a través de una función determinada, nos sería de gran utilidad poder conocer la derivada de un función cualquiera en un punto dado. Imaginemos por ejemplo, el siguiente problema:

Hemos llamado «x» al rango C2 donde podemos cambiar el valor de x sobre el cual queremos evaluar la función y su derivada. Mientras que en F(x), la celda C3, describimos la función a evaluar en términos de la variable anteriormente definida:

Si la fórmula F(x) es una función cualquiera, que puede ser cambiada por el usuario o mediante código, ¿cómo calcular la derivada dF/dx para cualquier x?
Comenzaremos suponiendo que F(x) es una función continua y diferenciable en x, lo que nos permitirá estimar una derivada en x mediante la suma y resta de un diferencial que llamaremos delta:

De forma tal que dF/dx evaluada en x0 estará dada por:

Lo primero que haremos será definir una función en VBA que nos permita evaluar una función cualquiera dada por el usuario para un valor de x arbitrario.
Utilizaremos para ello la función EVALUATE disponible en VBA, que nos permite calcular el valor de una fórmula existente en un rango. El truco consiste en combinar este método con un REPLACE que troque el valor de x por el valor deseado cada vez que lo encuentre en la función. El código en VBA queda como sigue:
Public Function EVALUARFUNCION(Funcion As Range, X As Double) As Double
'Evalua la formula especificada reemplazando
'donde diga 'X' por el valor especificado
Dim Evaluacion As String
Evaluacion = Replace(Funcion.Formula, "x", Str(X))
EVALUARFUNCION = Evaluate(Evaluacion)
End Function
Podemos probar esta nueva función directamente en Excel, verificando que entregue el valor esperado:

Finalmente, podemos usar el código anterior para evaluar F(X) tanto en (x+delta) como en (x-delta) y computar de esta forma la derivada que buscamos. El código en VBA quedará, entonces, como sigue:
Public Function DERIVADA(Funcion As Range, X As Double, Delta As Single) _
As Double
'Aproxima la derivada de la función evaluada en X
'mediante un Delta suficientemente pequeño
Dim FXmas As Double
Dim FXmenos As Double
FXmas = EVALUARFUNCION(Funcion, X + Delta)
FXmenos = EVALUARFUNCION(Funcion, X - Delta)
DERIVADA = (FXmas - FXmenos) / (2 * Delta)
End Function
Podemos probar nuestra nueva función directamente en Excel y ensayarla tanto con nuevos valores de x como con distintas funciones diferenciables en x.

¿Qué nuevas mejoras o aplicaciones se te vienen a la mente? ¡Nos vemos!
Un comentario