jueves, 16 de agosto de 2018

VBA: Derivada de una función lineal de una variable en Excel

Veremos una manera de obtener la ecuación derivada a partir de una función linea de una sola variable...
Obviamente las restricciones son altas, y por ese motivo nos limitaremos a una sola variable.

El ejemplo se basa en el concepto de Newton de función derivada (leer más aquí)

En nuestro desarrollo veremos el ejemplo sobre la función:
f(x) = 2x2-1x

(que para los principiantes, su función derivada deberá ser f'(x)= 4x-1



Comenzaremos generando con programación nuestras funciones personalizadas.

Una de ellas ya se explicó en este blog (leer aquí).

La UDF 'FuncionesLineales' permite tratar una ecuación escrita como texto en una celda como una ecuación 'de verdad'... y es la base del cálculo diferencial que veremos a continuación.


La segunda de las UDF programadas (llamada 'Derivada') replica el límite o cociente de Newton:

límite cuando h tiende a cero de (f(a+h)-f(a))/ h


Insertaremos las siguientes funciones en un módulo estándar:

Function Derivada(ecuacion As String, punto As Double)
Dim h As Double
Dim fa As Double, fah As Double
h = 0.000000000001

'reoplicaremos el cálculo del límiete cuadno se tiende a cero
'nos aprovecharemos de nuestra UDF qeu convierte en funciones operables
'ecuaciones escritas en una celda
fa = FuncionesLineales(ecuacion, punto)
fah = FuncionesLineales(ecuacion, punto + h)

'y ua vea calculado los valores en los puntos 'a+h' y en 'a'
'devolvemos el dato a la función
Derivada = (fah - fa) / h

End Function
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function FuncionesLineales(fx As String, valor_x As Double) As Double
'http://excelforo.blogspot.com/2018/05/vba-una-funcion-para-gobernarlas-todas.html

'aplicamos dos reemplazamientos
'1- para cambiar la variable por el valor concreto asignado
'2- tenemos en cuenta el cambio de configuración de los separadores decimales
'(recuerda que en el entorno del editor de VB el separador decimal es el punto, y no la coma!!)

func = Replace(Replace(fx, "x1", valor_x), ",", ".")

'retornamos el valor a la función creada
FuncionesLineales = Application.Evaluate(func)

End Function



Trabajemos con nuestras funciones.
En A12:A32 añadimos valores desde -5 a 5 en intervalos de 0,5.
En B12:B32 añadimos el valor de f(x), es decir, insertamos nuestra función:
=FuncionesLineales($B$9;$A12)

Y en C12:C32 el valor en cada punto de la derivada f'(x) insertando nuestra función UDF:
=Derivada($B$9;A12)

recuerda que en B9 tenemos escrita nuestra función f(x)=(2*x1^2)-1*x1


Con los valores de la función derivada para cada punto conseguidos y conocidos esos puntos (la x de nuestra equciación), podemos sabe y componer nuestra ecuación derivada, lo que haremos aplicando la función ESTIMACION.LINEAL

Así pues seleccionamos las celdas E13:F13 y escribimos:
=REDONDEAR(ESTIMACION.LINEAL(C12:C32;A12:A32;VERDADERO);2)

es decir, indicamos como argumento de 'conocidas_y' el rango con los valores de la derivada (C12:C32)
y como 'conocido_x' al de las equis (A12:A32)

Redondearemos el resultado para no arrastrar decimales innecesarios a la ecuación derivada..

Validamos matricialmente!!! (presionamos Ctrñ+Mayusc+Enter).

VBA: Derivada de una función lineal de una variable en Excel



Con ese resultado ya sabemos la pendiente y constante de nuestra recta derivada (f'(x) = m x + b)
Siendo 4 la pendiente y -1 la constante, y por tanto nuestra ecuación derivada buscada será:

f'(x)=4x-1

Lo que buscábamos...

Componiéndola con fórmulas en la celda F15 será:
=CONCATENAR(TEXTO(E13;"0,00");"x";SI(F13>0;"+"&TEXTO(F13;"0,00");SI(F13<0;TEXTO(F13;"0,00");"")))


Recuerda que este proceso no es extrapolable a todo tipo de funciones!!

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.