Máximos y mínimos de una función
Supongamos que en x=x1 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 x1. Para este caso es válido el siguiente teorema:
Teorema 1. Si f′(x1)=0, entonces en x=x1 la función tiene máximo cuando f″(x1)<0, y, un mínimo cuando f″(x1)>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)=x3−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 (−√33) es un mínimo y el segundo (√33) 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