A tu propio ritmo

Explora nuestra extensa colección de cursos diseñados para ayudarte a dominar varios temas y habilidades. Ya seas un principiante o un aprendiz avanzado, aquí hay algo para todos.

Bootcamp

Aprende en vivo

Únete a nosotros en nuestros talleres gratuitos, webinars y otros eventos para aprender más sobre nuestros programas y comenzar tu camino para convertirte en desarrollador.

Próximos eventos en vivo

Catálogo de contenidos

Para los geeks autodidactas, este es nuestro extenso catálogo de contenido con todos los materiales y tutoriales que hemos desarrollado hasta el día de hoy.

Tiene sentido comenzar a aprender leyendo y viendo videos sobre los fundamentos y cómo funcionan las cosas.

Buscar en lecciones


IngresarEmpezar
← Regresar a lecciones
Editar en Github
Abrir en Colab

Cálculo Derivadas con Python

Introducción a Derivadas

In [12]:
import matplotlib.pyplot as plt
import numpy as np
import sympy as sy

Motivación: Pendiente de una recta

slope=Y2Y1X2X1 slope = \frac{Y2 - Y1}{X2 - X1}

Considera:

f(x)=x+1  and  g(x)=x2+1 f(x) = x + 1 \ \ and \ \ g(x) = x^2 + 1

In [14]:
def f(x): return x + 1
def g(x): return x**2 + 1
x = np.linspace(-2,2,100)
In [7]:
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()
Out[7]:
<matplotlib.legend.Legend at 0x7f17c94f31f0>
No description has been provided for this image
In [9]:
x2 = np.linspace(1,1.1)
In [15]:
plt.plot(x2,f(x2),label='f')
plt.plot(x2,g(x2),label='g')
plt.legend()
plt.title('Zooming in on x=[1,1.1]x = [1,1.1]\nNow they both look Linear!')
Out[15]:
Text(0.5, 1.0, 'Zooming in on x=[1,1.1]x = [1,1.1]\nNow they both look Linear!')
No description has been provided for this image
In [17]:
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 x=[1,1.001,100]x = [1,1.001,100]\nNow they both look Linear!')
Out[17]:
Text(0.5, 1.0, 'Zooming in on x=[1,1.001,100]x = [1,1.001,100]\nNow they both look Linear!')
No description has been provided for this image

Definición

f(x)=limh0f(x+h)f(x)h  f'(x) = \lim_{h \to 0} \frac{f(x + h) - f(x)}{h} \

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.

Derivada como Función con Python

Primero, podemos investigar la derivada de una función utilizando la funcion diff de Sympy. Si ingresamos una expresión ff en términos de una variable xx, podemos obtener la derivada de esta expresión con sy.diff(f, x). Aquí hay un ejemplo:

In [18]:
def f(x):
    return x**2 - 2*x + 1
In [19]:
def df(x):
    h = 0.000001
    return (f(x + h) - f(x))/h
In [20]:
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")
Out[20]:
Text(0.5, 1.0, 'Function and its Derivative')
No description has been provided for this image

Una Función a su Derivada

In [8]:
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")
Out[8]:
Text(0.5, 1.0, 'Another function and its Derivative')
No description has been provided for this image

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?

In [9]:
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")
Out[9]:
Text(0.5, 1.0, 'Just the Derivative')
No description has been provided for this image
In [10]:
x = sy.Symbol('x')
df = sy.diff(f(x), x)
df = sy.expand(df)
df
Out[10]:
5*x**4 + 24*x**3 - 6*x**2 - 72*x + 1

Derivada como Recta Tangente

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 aa se puede considerar como la pendiente de la línea que pasa por aa y algún otro punto a+Δxa + \Delta x donde Δx\Delta x es muy pequeño.

De nuevo, tendríamos algo como:

f(a)=f(a+Δx)f(a)Δxf'(a) = \frac{f(a + \Delta x) - f(a)}{\Delta x}

para algún valor arbitrariamente pequeño de Δx\Delta x. También podemos entender que la expresión anterior nos proporciona un medio para aproximar valores cercanos a x=ax = a usando la línea tangente. Si reorganizamos los términos, podemos ver que:

f(a+Δx)=f(a)Δx+f(a)f(a + \Delta x) = f'(a)\Delta x + f(a)

Lo que esto hace es decirnos la pendiente de la recta tangente a la gráfica en el punto (a,f(a))(a, f(a)). Supongamos que tenemos la función f(x)=x2f(x) = x^2 y queremos saber la pendiente de la recta tangente en x=2x = 2. 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.

In [11]:
def f(x):
    return x**2

def df(x):
    h = 0.00001
    return (f(x + h) - f(x))/h
In [12]:
df(2)
Out[12]:
4.000010000027032
In [13]:
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')
In [14]:
tan_plot(2)
No description has been provided for this image
In [15]:
def g(x):
    return x*(x+2)*(x - 3)

def dg(x):
    h = 0.000001
    return ((g(x+h)-g(x))/h)
In [16]:
x = np.linspace(-3, 4, 1000)
plt.plot(x, g(x))
plt.axhline(color = 'black')
plt.axvline(color = 'black')
Out[16]:
<matplotlib.lines.Line2D at 0x11dc14e80>
No description has been provided for this image
In [17]:
x = sy.Symbol('x')
df = sy.diff(g(x), x)
df = sy.simplify(df)
a, b = sy.solve(df, x)
In [18]:
a, b
Out[18]:
(1/3 + sqrt(19)/3, -sqrt(19)/3 + 1/3)
In [19]:
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')
Out[19]:
[<matplotlib.lines.Line2D at 0x11e006898>]
No description has been provided for this image
In [20]:
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')
In [21]:
tan_plot(a, b)
No description has been provided for this image