Así como trabajamos en el final de la parte II del proyecto con la resolución de límites utilizando el módulo sympy
, podemos calcular derivadas de la misma manera, lo cual conseguiremos utilizando diff(y,x)
. Donde x
es una variable simbólica y y
una variable que depende de x
. Por ejemplo, podemos calcular la derivada de la función $f(x)=x^{2}$ la cual es
Lo cual puede calcularse también utilizando el siguiente código
import numpy as np
from sympy import *
# definimos a x como un símbolo
x = symbols("x")
# definimos la función de interés
y = x ** 2
# calculamos la derivada de y respecto de x
diff(y,x)
Asimismo podemos evaluar la derivada en algún punto, lo cual sabemos que representa (geométricamente) la pendiente de la recta tangente en ese punto; por ejemplo podemos calcular $f'(2)=2(2)=4$ o en código:
# colocaremos .subs(x,2) para efectuar matemáicamente f(2)
diff(y,x).subs(x,2)
Sabemos que al derivar una función volvemos a obtener otra función, por ello es que a la derivada podemos volver a derivarla obteniéndose así la derivada de segundo orden. Esto es, dada $f(x)$ dos veces derivable, la derivada de orden dos o segunda derivada se define como
$$ \frac{d^{2}}{dx^{2}}f(x)=\frac{d}{dx}\left(\frac{d}{dx}f(x)\right) $$Por ejemplo, sabemos que $\frac{d}{dx}x^{2}=2x$ y por ende
$$ \frac{d^{2}}{dx^{2}}f(x)=\frac{d}{dx}\left(\frac{d}{dx}x^{2}\right)=\frac{d}{dx}2x=2 $$En Python agregaremos como tercer parámetro a diff()
para indicar el orden de la derivada que deseamos calcular. Veamos
# derivada de segundo orden
diff(y,x,2)
Otro ejemplo interesante es calcular las derivadas de orden superior de la función $g(x)=\frac{1}{x}$:
# definimos la función g(x)
y = 1 / x
# calculamos la primer derivada
diff(y,x)
# calculamos la segunda derivada
diff(y,x,2)
# calculamos la tercera derivada
diff(y,x,3)
De tal manera tenemos que $$ \frac{d}{dx}f(x)=-\frac{1}{x^{2}},\ \ \frac{d^{2}}{dx^{2}}f(x)=\frac{2}{x^{3}}, \ \ \frac{d^{3}}{dx^{3}}f(x)=-\frac{6}{x^{4}} $$
Podemos también aplicar la regla de la cadena, por ejemplo podemos derivar la función $h(x)=(sen(x))^{2}$:
import numpy as np
x = symbols("x")
# definimos la función f
f = sin(x)
# definimos la función g que depende de la función f
g = f ** 2
diff(g,x)
Derivemos ahora la función $k(x)=ln(sen(x))$ cuya derivada es
$$ \frac{d}{dx}k(x)=\frac{\frac{d}{dx}sen(x)}{sen(x)}=\frac{cos(x)}{sen(x)} $$o en código
# definimos la función f
f = sin(x)
# definimos la función g que depende de f
g = log(f)
diff(g, x)
además podemos simplificar expresiones algebraicas, para ello utilizamos simplify()
. Por ejemplo
simplify(diff(g,x))
Como bien sabemos, en general, la derivada de $f(x)$ representa la pendiente de la recta tangente a la gráfica de $f(x)$ en el punto $x$. Es decir, si consideramos por ejemplo $f(x)=x^{2}$, y queremos conocer la pendiente de la recta tangente en el punto $x=3$ hacemos la evaluación $f'(3)=2(3)=6$. Obtengamos la ecuación de dicha recta. Sabemos que la ecuación punto-pendiente es de la forma
$$ y-y_{1}=m(x-x_{1}) $$pero en este caso la pendiente es $f'(3)=6$ y el punto $x_{1}=3$. Para obtener el punto $y_{1}$ basta con considerar $f(x_{1})=f(3)=3^{2}=9$. De tal manera
$$ y-9=6(x-3)=6x-18 $$de tal manera la ecuación de la recta tangente a la curva $f(x)$ en el punto $x=3$ es $y=6x+9$. Veamos graficamente:
import matplotlib.pyplot as mplot
# definimos la función f(x)
x = np.arange(-5,5, 0.01)
y = x ** 2
# graficamos la funcion
mplot.plot(x,y, color = "k", label = "$f(x)=x^{2}$")
# definimos la ecuación de la recta tangente v=6u+9, cambiamos u,v por x,y para evitar confuciones
u = np.arange(-2,5, 0.01)
v = 6 * u - 9
# graficamos la recta z=6x-9
mplot.plot(u,v, color = "r", label = "$y=6x-9$")
# graficamos el punto de tangencia
mplot.plot(3,9, marker = "o", color = "k")
mplot.grid()
mplot.legend()
mplot.show()
Finalmente, graficaremos varias rectas tangentes por lo que emplearemos un método similiar a la graficación de varios puntos como lo hicimos en límites. Comencemos por dibujar los puntos de interés, esto lo conseguiremos evaluando los puntos de tangencia de nuestro interés en la función $f(x)$. Por ejemplo, si el punto $x=2$ es un punto de interés, obtendremos la coordenada cmpleta evaluando $f(2)=2^{2}$, lo cual se consigue en usando .subs(x,2)
. Veamos
# definimos la función
x = symbols("x")
y = x ** 2
# derivamos
derivada = diff(y,x)
# lista de puntos de tangencia, en este caso serán -3,-2,-1,1,2,3 y 4
puntos_tangencia = [i / 4 for i in range(-12,16,4) if i != 0]
# agregamos el punto de tangencia x=0
puntos_tangencia.append(0)
# graficamos los puntos de tangencia iterando con un bucle for sobre los elementos de la lista de puntos de tangencia
for k in puntos_tangencia:
mplot.plot(k, y.subs(x,k), marker = "o", color = "c")
Después graficaremos las rectas tangentes. Para ello necesitamos
puntos_tangencia
y la ordenada $y_{1}$ se obtiene empleando y.subs(x,x1)
.derivada.subs(x,x1)
.Con base en todo lo anterior tenemos que
# definimos el dominio de graficación
u = np.arange(-4,4,0.01)
# inicializamos x1 con el primer valor de la lista puntos_tangencia
x1 = -3
# implementamos un bucle while
while x1 in puntos_tangencia:
y1 = y.subs(x,x1)
pendiente = derivada.subs(x,x1)
ecuacion_rec_tangente = pendiente * u - pendiente * x1 + y1
mplot.plot(u,ecuacion_rec_tangente)
del y1
x1 += 1
# es necesario eliminar la variable y1 para que ésta se vuelva a crear en otra iteración y tome el valor
# correspondiente de la x1 en cuestión
mplot.show()
Finalmente conjuntamos todo para obtener
# definimos la función
x = symbols("x")
y = x ** 2
# derivamos
derivada = diff(y,x)
# lista de puntos de tangencia, en este caso serán -3,-2,-1,1,2,3 y 4
puntos_tangencia = [i / 4 for i in range(-12,16,4) if i != 0]
# agregamos el punto de tangencia x=0
puntos_tangencia.append(0)
# graficamos los puntos de tangencia iterando con un bucle for sobre los elementos de la lista de puntos de tangencia
for k in puntos_tangencia:
mplot.plot(k, y.subs(x,k), marker = "o", color = "r")
# --------------------------------------------------------------------------------------------------------------------
# definimos el dominio de graficación
u = np.arange(-4,4,0.01)
# inicializamos x1 con el primer valor de la lista puntos_tangencia
x1 = -3
# implementamos un bucle while
while x1 in puntos_tangencia:
y1 = y.subs(x,x1)
pendiente = derivada.subs(x,x1)
ecuacion_rec_tangente = pendiente * u - pendiente * x1 + y1
mplot.plot(u,ecuacion_rec_tangente)
del y1
x1 += 1
# es necesario eliminar la variable y1 para que ésta se vuelva a crear en otra iteración y tome el valor
# correspondiente de la x1 en cuestión
# graficamos la función f(x)=x^2
v = np.arange(-4,4,0.01)
w = v ** 2
mplot.plot(v,w, color = "k")
mplot.show()