Máximos y mínimos de una función

Supongamos que en $x=x_1$ la derivada de la función $y=f(x)$ se reduce a cero, es decir, $f'(x)=0$. Admitamos, además que existe la segunda derivada, $f''(x)$, y es continua sobre cierta vecindad del punto $x_1$. Para este caso es válido el siguiente teorema:

Teorema 1. Si $f'(x_1)=0$, entonces en $x=x_1$ la función tiene máximo cuando $f''(x_1)<0$, y, un mínimo cuando $f''(x_1)>0$.

De acuerdo al teorema anterior, para caracterizar los puntos críticos de una función $f(x)$ es necesario utilizar el criterio de la segunda derivada. Entendiendo que los puntos críticos se obtiene de resolver la ecuación $f'(x)=0$.

En Python es posible realizar cálculo simbólico mediante la librería SymPy.


Ejemplo 1. Calcular y caracterizar los puntos críticos de la función $f(x) = x^3 - x$

Primero, y como siempre, importamos los módulos necesarios.

In [48]:
from sympy import *
from sympy.plotting import plot
from sympy.abc import x
init_printing()

Definimos la función con la cual operaremos:

In [22]:
f = x**3 - x

Acto seguido, calculamos la primera y segunda derivada de $f(x)$ mediante la función diff:

In [49]:
df = diff(f, x) # 1era. derivada
d2f = diff(f,x,2) # Segunda derivada
df, d2f
Out[49]:
$$\left ( 3 x^{2} - 1, \quad 6 x\right )$$

Los puntos críticos los calculamos resolviendo la ecuación $f'(x)=0$

In [50]:
pc = solve(Eq(df, 0))
pc
Out[50]:
$$\left [ - \frac{\sqrt{3}}{3}, \quad \frac{\sqrt{3}}{3}\right ]$$

Para determinar si se trata de un mínimo o máximo, utilizamos el criterio de la segunda derivada, sustituyendo los puntos críticos en $f''(x)$, es decir:

In [51]:
d2f.subs(x,pc[0]) # Primer punto crítico
Out[51]:
$$- 2 \sqrt{3}$$
In [52]:
d2f.subs(x,pc[1]) # Segundo punto crítico
Out[52]:
$$2 \sqrt{3}$$

Con esto determinamos, acorde al teorema 1, que el primer punto crítico $\left(\frac{-\sqrt{3}}{3}\right)$ es un mínimo y el segundo $\left(\frac{\sqrt{3}}{3}\right)$ un máximo. Podemos comprobarlo trazando la gráfica correspondiente:

In [54]:
plot(f, (x, -1, 1))
Out[54]:
<sympy.plotting.plot.Plot at 0x94ca890>

Podemos automatizar un poco este proceso definiendo una función que realice el procedimiento descrito.

In [84]:
def maxminf(f):
    """ Calcula los máximos y mínimos de una función f(x) """
    df = diff(f, x) # 1era. derivada
    d2f = diff(f, x, 2) # 2da. derivada
    pcs = solve(Eq(df,0)) # puntos críticos
    for p in pcs:
        if d2f.subs(x,p)>0: 
            tipo="Min"
        elif d2f.subs(x,p)<0: 
            tipo="Max"
        else: 
            tipo="Indefinido"
        print("x = %f (%s)"%(p,tipo))
In [85]:
maxminf(x**3 - x)
x = -0.577350 (Max)
x = 0.577350 (Min)

La función anterior puede arrojar errores cuando se tienen raíces complejas, lo cual podría considerarse mediante una estructura try-except o bien verificando si el punto crítico es un valor real.

Comentarios

Comments powered by Disqus