import matplotlib.pyplot as plt
import numpy as np
import sympy as sy
def f(x): return x + 1
def g(x): return x**2 + 1
x = np.linspace(-2,2,100)
plt.plot(x,f(x),label='f')
plt.plot(x,g(x),label='g')
plt.plot(0,f(0),'ro')
plt.plot(1,f(1),'ro')
plt.legend()
x2 = np.linspace(1,1.1)
plt.plot(x2,f(x2),label='f')
plt.plot(x2,g(x2),label='g')
plt.legend()
plt.title('Zooming in on \nNow they both look Linear!')
x2 = np.linspace(1,1.001,100)
plt.plot(x2,f(x2),label='f')
plt.plot(x2,g(x2),label='g')
plt.legend()
plt.title('Zooming in on \nNow they both look Linear!')
Definición
Nota: h es la distancia, esta se hace cada vez más pequeña para que podamos obtener la variación más pequeña posible de x (pendiente)
Podemos interpretar la derivada de varias maneras. Cuando empezamos a buscar la diferencia entre términos, podemos considerar la derivada como una medida de la tasa de cambio de alguna secuencia de números.
De manera similar, si tenemos una secuencia de forma cerrada en lugar de una secuencia, podemos considerar la derivada como una función que representa la tasa de cambio de nuestra función original.
Primero, podemos investigar la derivada de una función utilizando la funcion diff
de Sympy. Si ingresamos una expresión en términos de una variable , podemos obtener la derivada de esta expresión con sy.diff(f, x)
. Aquí hay un ejemplo:
def f(x):
return x**2 - 2*x + 1
def df(x):
h = 0.000001
return (f(x + h) - f(x))/h
x = np.linspace(-4, 4, 1000)
plt.plot(x, f(x), label = '$f(x)$')
plt.plot(x, df(x), label = '$f\'(x)$')
plt.axhline(color = 'black')
plt.axvline(color = 'black')
plt.legend(loc = 'best', frameon = False)
plt.title("Function and its Derivative")
x = np.linspace(-5, 2, 1000)
plt.plot(x, f(x), label = '$f(x)$')
plt.plot(x, df(x), label = '$f\'(x)$')
plt.axhline(color = 'black')
plt.axvline(color = 'black')
plt.legend(frameon = False)
plt.title("Another function and its Derivative")
Podemos obtener información importante del gráfico de la derivada sobre el comportamiento de la función que estamos investigando, especialmente el valor mínimo y máximo. Quizás podríamos tener solamente la gráfica de la derivada, ¿Puedes decir dónde ocurren los valores máximo y mínimo?
x = np.linspace(-5, 2, 1000)
plt.plot(x, df(x), label = '$f\'(x)$')
plt.axhline(color = 'black')
plt.axvline(color = 'black')
plt.legend(frameon = False)
plt.title("Just the Derivative")
x = sy.Symbol('x')
df = sy.diff(f(x), x)
df = sy.expand(df)
df
También podemos interpretar la derivada como la pendiente de una recta tangente, o mejor aún, una aproximación de esta recta tangente. Por ejemplo, la derivada en algún punto se puede considerar como la pendiente de la línea que pasa por y algún otro punto donde es muy pequeño.
De nuevo, tendríamos algo como:
para algún valor arbitrariamente pequeño de . También podemos entender que la expresión anterior nos proporciona un medio para aproximar valores cercanos a usando la línea tangente. Si reorganizamos los términos, podemos ver que:
Lo que esto hace es decirnos la pendiente de la recta tangente a la gráfica en el punto . Supongamos que tenemos la función y queremos saber la pendiente de la recta tangente en . Podemos definir una función como lo hacenmos normalmente, y una función para la derivada. Podemos usarlos para escribir una ecuación de la recta tangente a la gráfica de la función en este punto.
def f(x):
return x**2
def df(x):
h = 0.00001
return (f(x + h) - f(x))/h
df(2)
def tan_plot(a):
x = np.linspace((a-4), (a+4), 1000)
y = df(a)*(x - a) + f(a)
plt.plot(x, f(x))
plt.plot(a, f(a), 'o', markersize = 10)
plt.plot(x, y, '--k')
plt.axhline(color = 'black')
plt.axvline(color = 'black')
tan_plot(2)
def g(x):
return x*(x+2)*(x - 3)
def dg(x):
h = 0.000001
return ((g(x+h)-g(x))/h)
x = np.linspace(-3, 4, 1000)
plt.plot(x, g(x))
plt.axhline(color = 'black')
plt.axvline(color = 'black')
x = sy.Symbol('x')
df = sy.diff(g(x), x)
df = sy.simplify(df)
a, b = sy.solve(df, x)
a, b
x = np.linspace(-3, 4, 1000)
plt.plot(x, g(x))
plt.axhline(color = 'black')
plt.axvline(color = 'black')
plt.plot(a, g(a), 'o')
plt.plot(b, g(b), 'o')
def tan_plot(a, b):
x = np.linspace(-5,5, 1000)
y1 = dg(a)*(x - a) + g(a)
y2 = dg(b)*(x - b) + g(b)
plt.plot(x, g(x))
plt.plot(a, g(a), 'o', markersize = 10)
plt.plot(b, g(b), 'o', markersize = 10)
plt.plot(x, y1, '--k')
plt.plot(x, y2, '--k')
plt.ylim(-15, 15)
plt.xlim(-4,4)
plt.axhline(color = 'black')
plt.axvline(color = 'black')
tan_plot(a, b)