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.
from sympy import *
from sympy.plotting import plot
from sympy.abc import x
init_printing()
Definimos la función con la cual operaremos:
f = x**3 - x
Acto seguido, calculamos la primera y segunda derivada de $f(x)$ mediante la función diff
:
df = diff(f, x) # 1era. derivada
d2f = diff(f,x,2) # Segunda derivada
df, d2f
Los puntos críticos los calculamos resolviendo la ecuación $f'(x)=0$
pc = solve(Eq(df, 0))
pc
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:
d2f.subs(x,pc[0]) # Primer punto crítico
d2f.subs(x,pc[1]) # Segundo punto crítico
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:
plot(f, (x, -1, 1))
Podemos automatizar un poco este proceso definiendo una función que realice el procedimiento descrito.
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))
maxminf(x**3 - x)
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